【发布时间】:2014-07-30 09:44:09
【问题描述】:
假设我有以下树:
$ git log --graph --oneline --decorate --all
* 7b261e3 (HEAD, master) Revert "A"
* 32f08ae A
| * f0b008f (b) A
|/
* 83c0052 init
$ git log -p --graph --decorate --all
* commit 7b261e3534e12446b75d286ef94556d077a9ee87 (HEAD, master)
| Author: Shin Kojima <shin@kojima.org>
| Date: Tue Jun 10 03:13:29 2014 +0900
|
| Revert "A"
|
| This reverts commit 32f08ae6e6a8036a7ed0a72568ac41b3e0fe806a.
|
| diff --git a/test b/test
| index f16344d..26604dc 100644
| --- a/test
| +++ b/test
| @@ -1,3 +1,3 @@
| foo
| -hoge
| +bar
| buz
|
* commit 32f08ae6e6a8036a7ed0a72568ac41b3e0fe806a
| Author: Shin Kojima <shin@kojima.org>
| Date: Tue Jun 10 03:12:18 2014 +0900
|
| A
|
| diff --git a/test b/test
| index 26604dc..f16344d 100644
| --- a/test
| +++ b/test
| @@ -1,3 +1,3 @@
| foo
| -bar
| +hoge
| buz
|
| * commit f0b008f3da2426611b40560ce4b64be6e32707e5 (b)
|/ Author: Shin Kojima <shin@kojima.org>
| Date: Tue Jun 10 03:12:18 2014 +0900
|
| A
|
| diff --git a/test b/test
| index 26604dc..f16344d 100644
| --- a/test
| +++ b/test
| @@ -1,3 +1,3 @@
| foo
| -bar
| +hoge
| buz
|
* commit 83c00525a1d8168ae251cf33c00178d398ef4b54
Author: Shin Kojima <shin@kojima.org>
Date: Tue Jun 10 03:11:38 2014 +0900
init
diff --git a/test b/test
new file mode 100644
index 0000000..26604dc
--- /dev/null
+++ b/test
@@ -0,0 +1,3 @@
+foo
+bar
+buz
7b261e3 是 32f08ae 的还原提交,f0b008f 是 32f08ae 的精选。
当我将分支 b 合并到 master 时,我发现 git 会默默地忽略还原提交(7b261e3),结果与变基方法的结果不同。在这种情况下,我似乎仍然需要评估退化并亲自查看。
Merge made by the 'recursive' strategy.
test | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
$ cat test
foo
hoge
buz
有什么方法可以检测冲突吗?我做错了什么?
git 版本 2.0.0
【问题讨论】:
-
tl;dr on @torek 的回答:由于两个分支分歧,合并对累积变化起作用。您的 master 分支的累积内容更改现在没有什么不同。如果您希望 git 知道已正确应用提交的效果,请将其合并。你听说 git 非常擅长不重复精选的提交,确实如此,但那是因为它非常擅长识别合并基础——在复杂的情况下,它甚至会派生出一个 ersatz 理想基础。
标签: git merge rebase revert cherry-pick