当我从我那里分出来的回购股票时,Git发生了冲突,尽管我做的最后一件事就是从中拉出来

时间:2014-04-10 03:40:23

标签: git git-rebase git-pull git-fork

上下文

很久以前我创建了https://github.com/nicolas-raoul/Anki-Android(" repo1 ")。

有人将其分成https://github.com/ankidroid/Anki-Android(" repo2 "),这是我们所有人合作的地方。

我想做什么

我想更新 repo1 以获取 repo2 的最新源代码(以便我可以创建功能分支并发送拉取请求)。

我尝试了什么

在我的 repo1 的本地克隆中,我运行了git pull <repo2> master但是我遇到了很大的冲突。

我发现这非常令人惊讶,因为last thing I did是完全相同的命令。即使我上次从 repo2 撤出后我还没有修改过repo1,怎么会有冲突呢? (我刚刚删除了我的本地仓库,并从 repo1 重新克隆,因此您可以确定我的本地仓库不存在问题)

我认为我无法使用rebase,因为 repo2 最初是从我的回购 repo1 分叉的。

2 个答案:

答案 0 :(得分:1)

最简单的解决方案就是将当前repo1 master分支替换为repo2中的分支。

 cd repo1
 git add remote repo2 /url/repo2
 git fetch repo2
 git checkout master
 git reset --hard repo2/master
 git push -f

如果您是repo1唯一的工作人员,强制使用新历史记录不会影响其他任何人。
即使它有人克隆repo1,现在在repo2合作,所以再次没关系。

但如果你想要格外小心,你可以:

  • 根据repo2/master
  • 创建新分支
  • repo1
  • 上推送新分支
  • repo2
  • 上新分支的分支机构发出拉取请求(至repo1

在最后一种情况下,没有强制推动,没有伤害。

答案 1 :(得分:1)

@VonC's answer非常好,我甚至没有考虑过根据Repo2的主人添加和推送另一个分支的选项。我想添加关于为什么会发生这种情况的其他信息。

经过大量的挖掘,我发现了Repo1和Repo2之间的分歧点。两个回购的主分支之间当前最古老的共同祖先正好是标记v2.0

git log -1 4e4bafe
commit 4e4bafed59520908e4f1e7f0b3cb71f96f59a236
Author: nobnago <ksdfhskdjfwdewf@gmail.com>
Date:   Thu Jan 3 11:36:00 2013 +0100

    bump version 2.0

在那之后,两个分支似乎不再有任何共同的历史了。我在评论中提到了一个问题,我怀疑之后有人重写了公开推送提交,因为Repo2包含标记v2.0.1,但标记引用的提交不包含在Repo2中的任何分支中,也没有任何其他标签(包括最新标签)。

但是,在查看主分支的日志时,我没有看到任何明确的重写提交证据(创作日期与提交日期大不相同,以及作者和提交者是不同的人): / p>

# Repo2. "datelog" is an alias that displays author/author-date
# on the left, and committer/commit-date on the right.
git datelog -3 9f38b64
*   9f38b64 Flavio Lerda Flavio Lerda Thu Jan 3 15:11:35 2013 -0800 Thu Jan 3 23:14:33 2013 +0000 Merge pull request #1 from agrueneberg/searchbox
|\
| * b397e36 Alexander Grüneberg Alexander Grüneberg Sat Nov 17 21:16:03 2012 -0600 Thu Jan 3 16:27:47 2013 -0600 Search on Enter key.
* | 4e4bafe nobnago nobnago Thu Jan 3 11:36:00 2013 +0100 Thu Jan 3 11:36:00 2013 +0100 bump version 2.0

# Repo1
git datelog -2 badbf87
* badbf87 nobnago nobnago Thu Jan 3 12:55:42 2013 +0100 Thu Jan 3 12:55:42 2013 +0100 uncomment logs
* 4e4bafe nobnago nobnago Thu Jan 3 11:36:00 2013 +0100 Thu Jan 3 11:36:00 2013 +0100 bump version 2.0

然而,我在Repo1的日志中看到的是,你的叉子与Repo2不同步,直到大约4.5个月后!:

git datelog -1 nicolas/master
*   5d4ad0f Nicolas Raoul Nicolas Raoul Wed Apr 17 14:40:24 2013 +0900 Wed Apr 17 14:40:24 2013 +0900 Merge branch 'master' of github.com:ankidroid/Anki-Android

我看到你之间的时间看起来像是来自其他叉子的拉动请求。如果Repo2是您项目的规范仓库,那么您应该考虑更频繁地与它进行同步,以避免让您自己的分支中的历史分歧过多。 &#34;更经常&#34;并不意味着&#34;每周X次&#34;,它可能意味着在您接受的每个拉取请求之后,而不是稍后执行X拉请求。