353

Git Community BookのBasic Branching and Mergingセクションを読みました。

だから私はそれに従って、1 つのブランチを作成します: experimental.

その後私は:

  1. 実験的ブランチに切り替える (git checkout 実験的)
  2. たくさんの変更を加える
  3. コミットします (git commit -a)
  4. master ブランチに切り替える (git checkout master)
  5. いくつかの変更を加えてそこにコミットします
  6. 実験的 (git checkout 実験的) に戻す
  7. マスターの変更を実験的にマージします (git merge master)
  8. いくつかの競合がありますが、それらを解決した後、「git add myfile」を実行しました

  9. そして今、私は立ち往生しています、私はマスターに戻ることができません

私がする時

 $ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

そして私はしました:

$ git rebase --abort

進行中のリベースはありませんか?

そして私はしました:

$  git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.

master ブランチに戻るにはどうすればよいですか?

4

12 に答える 12

328

マージ中に競合が発生した場合は、マージ コミットを手動で終了する必要があります。競合したファイルを編集し、git addそれらを実行して解決済みとしてマークするという最初の 2 つの手順を実行したようです。最後に、実際に とのマージをコミットする必要がありますgit commit。その時点で、ブランチを再び切り替えることができます。

クイック ヒント: を使用git commit -am "your commit message"して、追跡されたファイルに対して追加操作とコミット操作を同時に実行できます。(クレジット: @vaheeds)

于 2010-03-18T23:52:38.433 に答える
229

マージの競合を解決した後、マージを完了するにはどうすればよいですか?

Git 2.12 (2017 年第 1 四半期) では、より自然なコマンドを使用できます。

git merge --continue

また、マージを続行/再開するときにメッセージを編集したくない場合:

git merge --continue --no-edit

Jeff King ( )によるコミット c7d227d (2016 年 12 月 15 日)を参照してください。commit 042e290commit c261a87commit 36​​7ff69 (2016 年 12 月 14 日) by Chris Packham ( ) を参照してください。( 2016 年 12 月 27 日コミット 05f6e1bJunio C Hamanoによってマージされました)peff
cpackham
gitster

2.12 リリース ノートを参照してください。

merge: ' --continue' の同義語として ' ' オプションをgit commit追加します

マージを完了することでマージを「継続」できるオプションを' git merge' に教えてください。 競合を解決した後にマージを完了する従来の方法は、' ' を使用することです。' ' オプションを持つ' ' や ' ' などの コマンドで、' 'にそのようなオプションを追加すると、一貫した UI が表示されます。--continue
git commit
git rebasegit cherry-pick--continuegit merge

于 2016-12-28T20:55:54.137 に答える
27

マージ/リベース中に行き詰まった場合は、いつでもできます

git reset --hard

作業を最後のコミットの状態に復元します。これにより、作業ツリーから変更が失われるため、マージ前にローカルで変更を行っていた場合、それらはこの後に失われます。これが、ローカルで変更を行っている場合はマージを開始しないことをお勧めする理由です。:)

于 2010-03-20T11:33:57.617 に答える
12

command を使用して 2 つのブランチをマージするときは常にgit merge brancha branchb、次の 2 つの可能性があります。

  1. 1 つのブランチ (brancha とします) は、コミット履歴をたどることで、もう一方のブランチ (branchb とします) から到達できます。

    2.しかし、2 つのブランチが古い時点で分岐している場合、git は新しいスナップショットを作成し、それを指す新しいコミットを追加します。したがって、マージするブランチ間に競合がない場合、git はスムーズに新しいコミットを作成します。

競合しない 2 つのブランチをマージした後、実行git logしてコミットを確認します。

マージするブランチ間でマージの競合が発生する興味深いケースに戻ります。これをページhttps://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Mergingから引用します

Git は、新しいマージ コミットを自動的に作成していません。競合を解決している間、プロセスを一時停止しました。マージの競合後にどのファイルがマージ解除されたかを確認したい場合は、次を実行できます。git status


したがって、マージの競合が発生した場合は、競合を解決してからステージング領域に加えた変更を追加し、 競合のために git によって一時停止されgit add filenameたコマンドを使用して変更をコミットする必要があります。git commitクエリ。詳細については、上記のリンクも参照してください。ご不明な点がございましたら、以下にコメントしてください。喜んでお手伝いさせていただきます。

于 2016-09-23T18:43:33.967 に答える
2

最初に明確にしたいのは、ブランチ名は特定のコミットのエイリアスに過ぎないということです。コミットは、プルしたり、マージをプッシュしたりするときに、git が機能するものです。各コミットには一意の ID があります。

$ git merge を実行すると、実際に起こっていることは、git が現在のブランチを、参照されているブランチがあるコミットに早送りしようとすることです (つまり、両方のブランチ名が同じコミットを指しています)。このシナリオは git にとって最も簡単です。新しいコミットがないため、対処する必要があります。あなたのブランチが身も凍るようなリリパッドにマスターがジャンプすることを考えてみてください。--no-ff フラグを設定することは可能です。この場合、コードの競合があったかどうかに関係なく、git は新しいコミットを作成します。

マージしようとしている 2 つのブランチ間でコードの競合がある状況では (通常、コミット履歴が過去に共通のコミットを共有している 2 つのブランチ)、早送りは機能しません。競合するファイルの両方のブランチで同じ行が変更されていない限り、git はファイルを自動的にマージできる場合があります。この場合、git は競合するファイルをマージし、自動的にコミットします。$ git diff --cached を実行すると、git の動作をプレビューできます。または、マージ コマンドに --no-commit フラグを渡すこともできます。これにより、追加してコミットする必要がある変更されたファイルがインデックスに残ります。ただし、これらのファイルを $ git diff して、マージによって何が変更されるかを確認できます。

3 番目のシナリオは、git が自動的に解決できない競合がある場合です。この場合、それらを手動でマージする必要があります。私の意見では、これは araxis merge や p4merge (無料) などのマージで行うのが最も簡単です。いずれにせよ、各ファイルを 1 つずつ実行する必要があります。マージが行き詰まっているように見える場合は、$ git merge --continue を使用して少しずつ進めてください。Git は続行できないかどうか、また続行できない場合はその理由を教えてくれるはずです。ある時点でマージを失敗したと感じた場合は、$ git merge --abort を実行できます。マージは元に戻され、最初からやり直すことができます。完了すると、マージした各ファイルは変更されたファイルになり、追加してコミットする必要があります。$ git status でファイルの場所を確認できます。マージされたファイルをまだコミットしていない場合。マージを完了するには、それを行う必要があります。

于 2016-09-25T01:09:54.163 に答える