git:在本地再次访问之后重复提交

我有一个本地的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 - 他们重新启动并推动他们的工作。 但是你的工作是基于他们预先重新提交的提交。 所以你的本地回购包含了这两个提交(2fc4fe7,b7a8656),他们的rebase已经从他们的回购和起源中消除了(大概他们是用一个--force推)。 所以当你从源头拉取那些本地提交似乎是转世以确保你的提交历史被保留,并且远程用户的重新提交的提交(9777c56,a2d7d8b)也被合并。 因此重复。


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

git pull --rebase

这会重置我的本地提交,以便它们比远程回购中的提交更新,即更近期。 所以当我重新绑定我的提交重新排序时,我不会重新绑定已经推送到远程仓库的提交。 通过重新绑定已经推送到远程仓库的提交,我复制了它们并为它们分配了一个新的SHA,而当我做了第二次git时,它重新提取了原始SHA /提交,因此是重复的。

详情请看这里:

git:推进单一提交,重新排序,重复提交

链接地址: http://www.djcxy.com/p/8771.html

上一篇: git: Duplicate Commits After Local Rebase Followed by Pull

下一篇: git: push a single commit