Git Rebase->为什么在拉动时会有合并?

问题描述 投票:1回答:2

我创建了一个分支来开发新功能。由于此新功能完全是作为一个新项目开发的,因此唯一可能的冲突源将在解决方案文件中。

随着功能的开发,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 rebase
2个回答
4
投票

为什么有合并提交

进行基准时,您正在更改Git历史记录。当您再次进行拉动时,Git会尝试再次合并这两个历史记录。由于默认情况下git pullgit fetch + git merge,因此将导致合并提交。

这不是更改历史记录后想要的,因为它将(部分)恢复您的历史记录更改。不幸的是git status的提示有点误导...

重新设置基准/更改历史记录后应该怎么做

更改历史记录(例如,变基)后,您需要强行推动,以便您也可以在遥控器上获取该历史记录。您是在告诉git,“历史不同,但是请相信我,这是有意的。”

建议使用“强制租用推送”:git push --force-with-lease-参见git push --force-with-lease vs. --force

修复当前状态的步骤

幸运的是,您可以使用Git reflog返回git pull之前!

这将解决错误的拉动,将不会解决任何冲突:)

执行步骤:

  1. 在reflog git reflog中找到正确的提交,因此在git pull之前(注意:您可以通过键入q退出reflog)] >>
  2. Git重置为该提交,例如git reset 327fb961e --hard
  3. 仔细检查并执行git push --force-with-lease
  4. 注意:如果您对git reset的输入有误,可以再次使用git reflog:)

注2:reflog仅在您的本地计算机上


0
投票

此部分足以通过master分支进行基础调整。

© www.soinside.com 2019 - 2024. All rights reserved.