git:本地变基后拉取重复提交

git: Duplicate Commits After Local Rebase Followed by 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 中检索到的远程存储库的所有提交现在都复制在日志中。

日志 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

日志 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

日志 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

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

请注意,我从未推送到远程存储库,只是从中拉取并进行了本地提交。另请注意,这个问题有很多标题相似的话题,但它们都有点不同,那里的答案似乎并不适用于此。

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

线索是远程用户的提交引用从 log1 更改为 log2 - 他们重新设置并推送了他们的工作。但是你的工作是基于他们的 pre-rebased 提交。因此,您的本地回购包含这两个提交(2fc4fe7,b7a8656),他们的 rebase 已经从他们的回购和来源中删除(大概他们用 --force 推送)。因此,当您随后从原点拉取时,这些本地提交似乎被重新生成以确保您的提交历史得到保留,并且远程用户的重新设置提交(9777c56,a2d7d8b)也被合并。因此重复。

问题出在 git 拉动上。我应该使用:

git pull --rebase

这会重新定位我的本地提交,以便它们位于顶部,即比远程仓库中的提交更新。因此,当我重新调整我的提交以重新排序时,我并没有重新调整已推送到远程仓库的提交。通过重新设置已推送到远程仓库的提交,我正在复制它们并为它们分配一个新的 SHA,当我执行第二个 git 拉时,它重新拉出原始 SHAs/commits,因此重复。

详情请看这里: