私は3ウェイマージブランチマージを行いました。
git checkout master
git merge BranchA
>> Fast-forward merge
git merge BranchB
>> Three-way-merge (prompts for a merge commit message)
私の質問は2つです。
マージを中止するにはどうすればよいですか?スリーウェイマージでは、マージコミットメッセージを書き込む場所をエディターに示しました。しかし、保存せずに終了すると、gitはとにかくマージを続行します(merge-commitメッセージがデフォルトのメッセージになり、書いた可能性がありますが中止されます)
commit 11111233
Merge 'BranchB' into master
コミットメッセージを確認していないのは明らかですが、マージが発生しないことを期待します(通常のコミットメッセージを確認しない場合と同じ動作です)。
git log
)BranchAからのコミット、その後BranchBのコミットからのコミットが表示されますか?2番目の質問をよりよく説明するために、私はテストを行いました。masterブランチから始まる2つのブランチ(AおよびB)。私はBにコミットし、次にAにコミットし、次にBにコミットし、最後に再びAにコミットしました。次にBranchAをmasterにマージしました。次にBranchBをmasterに変換します。
しかし、私がgit log
on master、これが出てきたものであり、なぜ私が2番目の質問をしたのか:
commit 730fdd4d328999c86fa4d3b6120ac856ecaccab1
Merge: 7eb581b cc1085a
Author: Arthur Conandoyle <[email protected]>
Date: Mon Feb 9 21:24:27 2015 +0100
Merge branch 'BranchB' into master_COPY
commit 7eb581b39a8402e1694cc4bf4eab4a3feb1143f8
Author: Arthur Conandoyle <[email protected]>
Date: Mon Feb 9 21:23:18 2015 +0100
BranchA) - This should be the (second) last change of the branch, and be the
most recent into the git log, even if I merge another branch into master,
AFTER the one where we are committing this.
commit cc1085a6aaa2ee4b26d3c3fbb93bee863d9e7c28
Author: Arthur Conandoyle <[email protected]>
Date: Mon Feb 9 21:20:29 2015 +0100
(BranchB) - Add settings to the last new features
commit 5f5b846a2f89886d01244ba77af941f554233b51
Author: Arthur Conandoyle <[email protected]>
Date: Mon Feb 9 21:18:54 2015 +0100
(BranchA) - Add some changes
commit 92a57a56b6b7c9694fbedda71b8070fc58683dde
Author: Arthur Conandoyle <[email protected]>
Date: Mon Feb 9 21:18:17 2015 +0100
(BranchB) - Some changes
commit 221765476e348833cf8da73b1bf5239f3d4240e8
Author: Arthur Conandoyle <[email protected]>
Date: Tue Feb 3 12:12:19 2015 +0100
Change (this is the last commit of the parent 'master' branch)
(Srdjan Gruborが書いたように)マージされたBranchAと[〜#〜]、その後[〜# 〜]マージされたすべてのコミットBranchB、マージの順序に従って... ..しかしgit log
代わりにそれらを時系列で表示し、コミットはブランチにグループ化されて表示されません!
BranchBマージは完全に通常であり、通常のコミットメッセージを要求します。デフォルトがあります。変更せずに終了すると、マージが完了します。マージ自体が成功したので、それを停止する唯一の方法は、悪いマージメッセージを提供することです(空のメッセージはフックなしでそれを行います)。
マージが停止したら、次のコマンドで中止できます
git merge --abort
# or
git reset --merge
誤ってコミットしたもののバックアウトは
git reset --hard @{1}
Gitにはブランチの「所有権」という概念はありません。 コミットを参照するすべての方法 は同等です。
あなたは構造のより良いアイデアを得ることができます git log はあなたに
git log --graph --decorate --oneline
--date-order
と--topo-order
と--all
で試してください。
あなたの編集に関して、その出力をgit log
sortsします。これは、線形の歴史の中でも驚くべきことです。 ソート方法を変更するためのフラグ があり、--graph
を追加すると、デフォルトのソートが--topo-order
に変更されます。
もう1つの注意点は、gitがブランチを早送りすると、マージコミットが行われないことです。
C---D <-- branch
/
A---B <-- mainline
単純なグラフの早送りの結果を介してmainline
がbranch
を取得できるようにします。
C---D <-- mainline, branch
/
A---B
単純な直線として簡単に描かれますが、(git merge --no-ff
を使用して)マージコミットを強制すると、実際には2つの親を持つマージコミットが生成されます。
C---D <-- branch
/ \
A---B-------M <-- mainline
これは(より多くのコミットを持つように一般化された後)コミットソートプロセスのためのより興味深いオプションを提示します。
終了して使用した後、マージを「中止」できます
git reflog
以前のツリー状態に戻ります。通常、マージは発生順に並べ替えられるのではなく、ブランチコミット順に並べ替えられます。つまり、マージコミットの後にすべてのソースブランチコミット(発生順)が表示され、その後にメインブランチコミット(発生順)が表示されます。