How to stop merging in git?
我有一个三路合并分支合并:
1 2 3 4 5 6 7 8 | git checkout master git merge BranchA >> Fast-forward merge git merge BranchB >> Three-way-merge (prompts for a merge commit message) |
我的问题有两个:
如何中止合并?通过三种方式的合并,我向编辑器展示了在哪里编写合并提交消息。但是如果我不保存就退出,Git将继续进行合并(只是合并提交消息将是默认消息,而不是我本来可以编写但中止的消息)
1
2commit 11111233
Merge 'BranchB' into master号
虽然,显然还没有确认提交消息,但是我希望合并不会发生(与不确认正常提交消息时的行为相同)。
- 两个合并分支的提交是否按时间顺序排序?或者首先(在
git log 中),我会看到分支机构的提交,然后看到分支机构的提交?
编辑
为了更好地解释第二个问题,我做了一个测试:2个分支(A和B),从主分支开始。我在B上做了承诺,然后在A上做了承诺,然后在B上做了承诺,最后在A上做了承诺。然后我把brancha合并成master。然后分支成为主。
但当我向师父问话时,这就是我所说的,也是我问第二个问题的原因:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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所写)我应该首先(按时间顺序)从合并的分支A提交所有的提交,然后按照合并的顺序从合并的分支B提交所有的提交……但有趣的是,
BranchB合并是非常普通的,请求一个普通的提交消息。有一个默认值,如果不更改就退出,合并将完成。由于合并本身已经成功,现在停止它的唯一方法是提供一个错误的合并消息(空的合并消息将在没有钩子的情况下进行)。
当合并停止时,可以使用
1 2 3 | git merge --abort # or git reset --merge |
号
你刚才犯的错误是
1 | git reset --hard @{1} |
在Git中没有分支"所有权"的概念,所有引用提交的方法都是对等的。
您可以更好地了解Git日志向您显示的结构
1 | git log --graph --decorate --oneline |
。
用
关于您的编辑,
另一项需要注意的是,当Git快速转发分支时,不存在合并提交:
1 2 3 | C---D <-- branch / A---B <-- mainline |
允许
1 2 3 | C---D <-- mainline, branch / A---B |
。
它被简单地画成一条直线,但是强制合并提交(与
1 2 3 | C---D <-- branch / \ A---B-------M <-- mainline |
。
对于提交排序过程,它(一旦被概括为具有更多提交)提供了更有趣的选项。
完成并使用后,可以"中止"合并。
1 | git reflog |
返回到以前的树状态。合并通常不是按时间顺序排序,而是按分支提交顺序排序,然后分别排序。这意味着您将看到合并提交之后是所有源分支提交(按时间顺序),然后是主分支提交(按时间顺序)。