17

我对此有点疑惑……

我有两个分支,它们都具有相同的提交系列。

真实的历史是它们是由我的同事编写的,提交并推送到分支 A 的 github。在某个阶段,我将分支 A 与我的 B 分支合并。

git 现在似乎显示的是他在分支 A 中的提交及其哈希值,以及我的(发散的)分支中的相同提交,显示我作为作者,以及一组不同的哈希值,与我在分支上所做的工作混合在一起.

这感觉像是某种变基问题,(我们有时都使用 GitHubForWindows 将变基作为同步的一部分),但我不知道向我们任何一方报告了问题。

任何有关导致此问题的原因或如何解决问题的想法都将不胜感激。

4

4 回答 4

9

你应该得到一些强大的工具(plaingitk应该就可以了)并仔细检查匹配的(但哈希值不同)提交——寻找Author,CommitterDate字段中的差异。还要比较父提交的哈希,因为提交对象还记录其父提交的哈希,因此引用不同父 SHA-1 提交名称的相同提交将不同。

您还可以详细说明您的提交与您的同行创作的提交“混合”到什么程度?所有这些提交是形成线性历史还是存在合并点?

前者表明使用了变基。

根据目前可用的信息,我会这样做:

  1. 停止使用“Github for Windows”,因为简单明了的解决方案往往会造成您现在面临的情况:当某些东西坏了时,您不知道它为什么坏了以及如何破解。

  2. 获取适用于 Windows 的“常规” Git(如果您想要不试图智取用户的精美 GUI,则可能是Git 扩展)。

  3. 通过分叉另一个分支来保存您当前的功能分支。

  4. (硬)将您的功能分支重置为您的同行。

  5. 从您保存的分支中挑选从最旧到最新的更改。

    这可能会产生冲突(因为这些提交将被植入它们最初创建的不同代码状态)。

结果,您将拥有一个没有“虚假相同”提交的分支。

然后,您和您的同行都应该阅读合并和变基工作流程,采用其中一个,然后在处理功能分支时, 明智地进行合并和/或变基,了解您为什么这样做以及结果会发生什么. 我建议您不要盲目地依赖工具来做正确的事™。

于 2013-04-26T15:25:45.857 回答
5

如果git rebase是您工作流程的一部分,那么您所描述的内容很常见。例如:

$ git log --graph --oneline --all
* 76af430 fc           # branch: foo
| * 7c495ad mb         # branch: bar, master
|/  
* 74cbb35 a

$ git rebase foo       # while on branch master
First, rewinding head to replay your work on top of it...
Applying: mb

$ git log --graph --oneline --all
* 6810e67 mb           # branch: master
* 76af430 fc           # branch: foo
| * 7c495ad mb         # branch: bar
|/  
* 74cbb35 a
于 2013-04-26T15:17:29.833 回答
3

在重新设置两个串联的分支后,我遇到了这个“git diff diff”问题。相同的提交被应用于相同的分叉点,所以我很困惑地看到分支分歧。甚至补丁 ID 也是一样的。

查看原始差异发现差异在于“提交者时间”:

$ diff <(git show --format=raw $COMMIT1) \
       <(git show --format=raw $COMMIT2)
1c1
< commit $COMMIT1
---
> commit $COMMIT2
5c5
< committer $ME <me@work.com> 1470128045 +0200
---
> committer $ME <me@work.com> 1470129095 +0200

在 git rebase 上重做--committer-date-is-author-daterebase 修复了一些分歧,但不是全部。(我不确定为什么..?我认为分歧发生在第一次重新合并时)

然后我使用 filter-branch 作为大锤:

git filter-branch --env-filter \
'export GIT_COMMITTER_DATE=$GIT_AUTHOR_DATE'\
origin/master..HEAD

这足以使系列保持一致:

$ git show --format=raw HEAD | egrep 'author|committer'
author $ME <me@work.com> 1470065063 +0200
committer $ME <me@work.com> 1470065063 +0200
于 2016-08-02T11:33:49.503 回答
1

我有来自具有不同哈希 id 的远程和本地分支的相同提交。似乎git pull --rebase解决了我的问题。

于 2020-06-29T13:24:26.163 回答