git:在本地Rebase之后重复提交Pull

时间:2015-01-02 21:58:50

标签: git duplicates rebase pull

我有一个本地git存储库,我运行以下命令:

git.exe pull -v --no-rebase --progress "origin" // pull 1
(make a few local commits)
git.exe pull -v --no-rebase --progress "origin" // pull 2
git log --pretty=format:"%h - %an : %s"         // log 1
git rebase -i HEAD~4
(move local commit 1 down 2 positions)
git log --pretty=format:"%h - %an : %s"         // log 2
git.exe pull -v --no-rebase --progress "origin" // pull 3
git log --pretty=format:"%h - %an : %s"         // log 3

执行此操作后,我在pull 1中检索到的远程存储库的所有提交现在都在日志中重复。

Log 1看起来像这样:

84e4015 - Me : Local Commit 3
0dbe86a - Me : Local Commit 2
d57ba2a - Me : Merge branch 'master' of remote repository
a86ea35 - Me : Local Commit 1 before reordering
2fc4fe7 - Remote User 2 : Remote Commit 2
b7a8656 - Remote User 1 : Remote Commit 1
8ce80fc - Me : Merge branch 'master' of remote repository

Log 2看起来像这样:

cf1ff7b - Me : Local Commit 3
cd14463 - Me : Local Commit 2
b9d44fb - Me : Local Commit 1 after reordering
9777c56 - Remote User 2 : Remote Commit 2
a2d7d8b - Remote User 1 : Remote Commit 1
8ce80fc - Me : Merge branch 'master' of remote repository

log 3看起来像这样:

e8e1a85 - Me : Merge branch 'master' of remote repository
cf1ff7b - Me : Local Commit 3
cd14463 - Me : Local Commit 2
b9d44fb - Me : Local Commit 1 after reordering
9777c56 - Remote User 2 : Remote Commit 2
a2d7d8b - Remote User 1 : Remote Commit 1
2fc4fe7 - Remote User 2 : Remote Commit 2 // duplicate 2
b7a8656 - Remote User 1 : Remote Commit 1 // duplicate 1
8ce80fc - Me : Merge branch 'master' of remote repository

我做错了什么?我该如何预防?我该如何解决?

请注意,我从未推送到远程存储库,只是从中提取并进行了本地提交。另请注意,这个问题有很多类似标题的主题,但所有这些主题都有所不同,这里的答案似乎并不适用。

2 个答案:

答案 0 :(得分:0)

不是你,而是远程用户。看起来他们已经重新设置了你已经基于工作的提交,然后推回原点。不太善于交际。

线索是远程用户的提交引用从log1更改为log2 - 他们重新启动并推动了他们的工作。但是你的工作是基于他们预先重新提交的提交。所以你的本地回购包含了他们的rebase已从他们的回购和原点中消除的那两个提交(2fc4fe7,b7a8656)(可能是他们推了--force)。因此,当您从原点拉出时,这些本地提交似乎是重新生成的,以确保您的提交历史记录被保留,并且远程用户的重新提交的提交(9777c56,a2d7d8b)也被合并。因此重复。

答案 1 :(得分:0)

问题在于git pull。我应该使用:

git pull --rebase

这会对我的本地提交进行重新设定,以便它们比远程仓库中的提交更高,即更新。因此,当我重新提交我的提交以重新排序时,我不会重新定位已被推送到远程仓库的提交。通过重新定位已被推送到远程仓库的提交,我正在复制它们并为它们分配一个新的SHA,当我执行第二个git时,它会重新拉动原始的SHA /提交,因此重复。

请点击此处了解更多详情:

git: Pushing Single Commits, Reordering with rebase, Duplicate Commits