我试图恢复合并,但我不知道是否使用git revert -m 1 <merge commit's sha>
或git revert -m 2 <merge commit's sha>
。如何找出哪个父母是-m 1
,哪个父母是-m 2
?git恢复合并:确定哪个父项是哪个(-m 1 vs -m 2)
回答
那么,超短回答是,它总是-m 1
。 :-)但是,这需要解释一下:
父母是有序的,而像
git log
和git show
命令显示的顺序为:commit c13c783c9d3d7d3eff937b7bf3642d2a7fe32644 Merge: 3f7ebc6ec 39ee4c6c2
所以这里
3f7ebc6ec
被父#1和39ee4c6c2
是父母#2。后缀
^
操作需要这些相同的值:$ git rev-parse c13c783c9d3d7d3eff937b7bf3642d2a7fe32644^1 3f7ebc6ece46f1c23480d094688b8b5f24eb345c
(当然
...^2
的将是另一个)。绘制图形的程序(包括
git log --graph
)将向您显示这些图形如何连接。但最重要的是,第一个任何合并的父级是您进行合并时的当前提交。
特别地,这意味着,如果你在分支main
和运行git merge sidebranch
,提交你现在做(如果一切顺利的话)或最终(如果必须通过手动来解决合并)由作为其第一个父母,main
分支的前一个技巧。它的第二个父母因此是sidebranch
的小费。
假设,那么,我们有这个入手:
...--o--*--A--B------C <-- main
\
D--E--F--G--H <-- sidebranch
当我们运行git merge
。在共同的基础提交是*
,和Git进行新的合并提交M分别做,本质:
git diff * C
(什么?我们什么改变)git diff * H
(他们怎么改变?)
,然后结合这两套变化,并运用那些*
,给我们这个最终结果:
...--o--*--A--B------C--M <-- main
\ /
D--E--F--G--H <-- sidebranch
现在,如果在D-E-F-G-H
改变了一切,在A-B-C
改变是完全独立的一切,如何 Git做了回复,只要它保持A-B-C
更改,同时开沟D-E-F-G-H
更改也没关系。
但是,如果B
与F
大体相同,即B
和F
修复了一个错误呢?在这种情况下,我们不要想撤销B
和F
的共享更改,即Git拿了一份副本。 这就是-m 1
部分来自于。
当git revert
去撤消一些变化,它运行其自己的git diff
。它运行的git diff
将要恢复的提交与其父项进行比较。对于任何普通的非合并提交,这很容易:比较B
与A
或E
vs D
或其他什么,以查看发生了什么,并将其退出。但是,对于合并提交,并不清楚要比较哪个父级(除非它是:-))。这里的第一父C
,所以让我们看看我们得到什么,如果我们运行:
git diff C M
C
和M
之间的变化是那些我们拾起加入的变化从D-E-F-G-H
的变化,我们已经有在A-B-C
,如果我们比较M
和*
。换句话说:
如果
B
和F
重叠100%,在C
航班吗M
变化是D-E-G-H
:家居除了的重叠。所以我们结束了这些。如果
F
中有更变化比B
,在C
航班吗M
的变化是D-E-(some-of-F)-G-H
:我们拉闸复原这些修改,但不是那些在B
。如果
F
中有较少变化比B
的变化C
航班吗M
只是D-E-G-H
再次,我们拉闸恢复只是那些。
因为第一父C
,我们要回退D-E-F-G-H
的变化(不包括任何通过A-B-C
我们已经有了),我们想在这个复归-m 1
。
- 1. 无法合并后git恢复-m 1
- 2. git commit -m vs git commit -am
- 3. m是一个定义为10 + 2的宏;为什么m * m评估为32?
- 4. 如何计算总和(1 + a%m + a^2%m ...... + a^n%m)
- 5. 什么是语言{0^m 1^m 2^n | n> = 0,m> n}
- 6. 具有决定器决定{<M> | M是TM和| L(M)| = N},建立一个判定器判定N-1
- 7. m/m/1队列示例
- 8. Git恢复合并
- 9. MVC中的M在哪里?
- 10. 哪一个是获取1-M关系数据的最佳方式?
- 11. 区分1:M关联对1:M中的M构成
- 12. Git恢复合并,再加上一个提交重新合并
- 13. vsDiffMerge.exe/m合并选项是否像/ t选项一样工作?
- 14. 哪个Git合并策略更好?
- 15. M Project vs Sproutcore
- 16. 这个函数是O(N + M)还是O(N * M)?
- 17. omnet ++ M/M/1队列长度
- 18. 确定M的值,M是否取决于k?
- 19. Git的合并合并后,并恢复
- 20. c#如何找出“m”来自哪里(m => m.SomeProperty)?
- 21. “是”vs“有”:哪个更好?
- 22. 为什么m [1] - m [0]返回3,其中m是3x3矩阵?
- 23. 合并2个data.frames与合并()产生错误:错误在sort.list(BX [M $ XI])
- 24. 找到这个二元递推方程的公式? f(m,n)= f(m-1,n)+ f(m,n-1)
- 25. 合并.h和.m文件
- 26. 如何从1 x n cellarrays等m x 1 cellarray做一个m x n cellarray?
- 27. Git合并提交如何知道哪个是“真正的”父对象?
- 28. Android M + RetroFit 2
- 29. 如何确定的时间复杂度为O(M + N)或O(Math.max(M,N))
- 30. 哪个Pom是父母?