[解決済み] Git リベース: コンフリクトで進行が妨げられる
質問
昨日masterから作成したgitブランチ(v4)を持っています。 master にいくつかの変更があり、それを v4 に取り込みたいと思っています。 v4 で、私は master からリベースを実行しようとしましたが、1 つのファイルが物事を台無しにし続けます:バージョン番号を含む 1 行のテキスト ファイルです。 このファイルは
app/views/common/version.txt
で、リベース前はこのテキストが含まれています。
v1.4-alpha-02
こんな感じです。
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
は
version.txt
は今、このように見えます。
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
ということで、整理してみると、今はこんな感じです。
v1.4-alpha-02
で、続けてみました。最初はコミットを試してみます。
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
そこで運が悪い。 それで、ファイルを追加しようとしたのです。
git add app/views/common/version.txt
反応なし。 ニュースがないのは良いニュースだと思います。 というわけで、続けてみる。
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
この時点で、これとぐるぐる回って、机から頭を叩いています。
どうしたんだろう? 私は何を間違えているのでしょうか? どなたか教えてください。
編集 - unutbuさんへ
ご指摘の通りファイルを変更したところ、同じエラーが発生しました。
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
どのように解決するのですか?
私はリベースで同じような問題に遭遇しました。私の問題の原因は、あるコミットがファイルを変更しただけで、解決するときにこのコミットで導入された変更を破棄したことでした。私は、対応するコミットをスキップすることで問題を解決することができました (
git rebase --skip
).
この問題はテストリポジトリで再現できます。まず、リポジトリを作成します。
$ mkdir failing-merge
$ cd failing-merge
$ git init
Initialized empty Git repository in $HOME/failing-merge/.git/
の元の内容をコミットします。
version.txt
をmasterにコミットします。
$ echo v1.4-alpha-02 > version.txt
$ git add version.txt
$ git commit -m initial
[master (root-commit) 2eef0a5] initial
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 version.txt
を作成します。
v4
ブランチを作成し、その内容を
version.txt
.
$ git checkout -b v4
Switched to a new branch 'v4'
$ echo v1.4-alpha-03 > version.txt
$ git add version.txt
$ git commit -m v4
[v4 1ef8c9b] v4
1 files changed, 1 insertions(+), 1 deletions(-)
に戻る
master
の内容を変更し
version.txt
の内容を変更し、リベースの際に衝突が起こるようにします。
$ git checkout master
Switched to branch 'master'
$ echo v1.4-alpha-04 > version.txt
$ git add version.txt
$ git commit -m master
[master 7313eb3] master
1 files changed, 1 insertions(+), 1 deletions(-)
に切り替えます。
v4
ブランチに戻り、リベースを試みます。でのコンフリクトで失敗します。
version.txt
で失敗します。
$ git checkout v4
Switched to branch 'v4'
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: v4
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging version.txt
CONFLICT (content): Merge conflict in version.txt
Recorded preimage for 'version.txt'
Failed to merge in the changes.
Patch failed at 0001 v4
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
$ cat version.txt
<<<<<<< HEAD
v1.4-alpha-04
=======
v1.4-alpha-03
>>>>>>> v4
を選択することで衝突を解決します。
master
の内容を
version.txt
. ファイルを追加して、リベースを続行しようとします。
$ echo v1.4-alpha-04 > version.txt
$ git add version.txt
$ git rebase --continue
Applying: v4
No changes - did you forget to use 'git add'?
If there is nothing left to stage, chances are that something else
already introduced the same changes; you might want to skip this patch.
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
失敗しました。何が変わるか見てみましょう
git
は、私たちのリポジトリに何があるのか考えてみましょう。
$ git status
# Not currently on any branch.
nothing to commit (working directory clean)
あ~あ、変化がない。前回のエラーメッセージを詳しく読むと
git
がこのことを知らせてくれていて、推奨されているのは
git rebase --skip
. 彼は、「もしステージするものが何も残っていないなら、他のものがすでに同じ変更を導入している可能性があるので、このパッチをスキップしたいかもしれません」と言いました。
$ git rebase --skip
HEAD is now at 7313eb3 master
注意事項
: ご注意ください
git rebase --skip
が実行したコミットを完全に削除します。
git
がリベースしようとしたコミットを完全に削除します。私たちの場合、これは
git
はこれが空のコミットであることを訴えているからです。リベースが完了した時点で変更を失ってしまったと思う場合は
git reflog
を使ってリベース前のリポジトリのコミット ID を取得し、そのコミット ID に基づいて
git reset --hard
を使ってデポをその状態に戻します(これも破壊的な操作です)。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリでのマージの衝突を解決するには?
-
[解決済み] git rebase の取り消し
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
-
[解決済み] ローカルのGitブランチをリモートレポにコピーする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[git push] 解決策: ! [リモート拒否] master -> master (受信前のフックは拒否されました)
-
git commit to GitHub エラー、プロンプト ! [リモート拒否] master -> master (pre-receive hook declined) エラー: 失敗しました。
-
gitlab をアップロード ! [リモート拒否] dev -> dev (受信前のフックが拒否されました)
-
解決策正しいアクセス権を持っていることと、リポジトリが存在することを確認してください。
-
コミットメッセージが空だったため、コミットを中止する git commit
-
gitlabの紹介と使い方
-
git push issues
-
[解決済み] 現在のブランチにあるファイルをメインブランチにある同じファイルに上書きしますか?
-
[解決済み] なぜgit AuthorDateはCommitDateと違うのですか?
-
[解決済み] ファイル変更時のDockerコンテナの再構築