我创建了一个分支来开发新功能。由于此新功能完全是作为一个新项目开发的,因此唯一可能的冲突源将在解决方案文件中。
随着功能的开发,master分支被更新了几次。完成开发和测试后,我做了:
git checkout master
git fetch
git pull
git checkout myFeature
git rebase master
基准(和所有其他命令)运行正常,未报告冲突/错误/问题。我的下一步是转到git status
,结果是:
在分支myFeature上您的分支机构和“来源/ myFeature”有所不同,并分别具有7和5个不同的提交。 (使用“ git pull”将远程分支合并到您的分支中)
[当我git pull
打开合并并查看历史记录时,我的提交已重复。在我看来,这种重复是不应该发生的。我期望我的提交应该在对主服务器的最后一次(当前)提交之后重新应用。
我做错了事还是期望错了?
进行基准时,您正在更改Git历史记录。当您再次进行拉动时,Git会尝试再次合并这两个历史记录。由于默认情况下git pull
为git fetch
+ git merge
,因此将导致合并提交。
这不是更改历史记录后想要的,因为它将(部分)恢复您的历史记录更改。不幸的是git status
的提示有点误导...
更改历史记录(例如,变基)后,您需要强行推动,以便您也可以在遥控器上获取该历史记录。您是在告诉git,“历史不同,但是请相信我,这是有意的。”
建议使用“强制租用推送”:git push --force-with-lease
-参见git push --force-with-lease vs. --force。
幸运的是,您可以使用Git reflog返回git pull
之前!
这将解决错误的拉动,将不会解决任何冲突:)
执行步骤:
git reflog
中找到正确的提交,因此在git pull
之前(注意:您可以通过键入q退出reflog)] >>git reset 327fb961e --hard
git push --force-with-lease
。 注意:如果您对git reset
的输入有误,可以再次使用git reflog
:)
注2:reflog仅在您的本地计算机上
此部分足以通过master
分支进行基础调整。