gpt4 book ai didi

Git Rebase -> 为什么在 pull 时会 merge ?

转载 作者:行者123 更新时间:2023-12-03 23:35:33 29 4
gpt4 key购买 nike

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

随着功能的开发,主分支更新了几次。当我完成开发和测试时,我做了:

git checkout master
git fetch
git pull
git checkout myFeature
git rebase master

rebase (和所有其他命令)运行良好,没有报告任何冲突/错误/问题。我的下一步是到 git status结果是:

On branch myFeature
Your branch and 'origin/myFeature' have diverged, and have 7 and 5 different commits each, respectively. (use "git pull" to merge the remote branch into yours)



当我 git pull merge 已打开并查看历史记录,我的提交被重复。在我看来,这种重复是不应该发生的。我期待我的提交应该在最后一次(当前)提交后重新应用。

我做错了什么还是我的期望是错误的?

最佳答案

为什么会有 merge 提交

当您进行 rebase 时,您正在更改 Git 历史记录。当您再次执行 pull 操作时,Git 会尝试再次 merge 两个历史记录。默认情况下 git pullgit fetch + git merge ,这将导致 merge 提交。

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

rebase /更改历史记录后您应该做什么

更改历史记录(例如 rebase)后,您需要强制推送,以便您也可以在 Remote 上获得该历史记录。你告诉 git 然后“历史是不同的,但相信我,这是有意的”。

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

修复当前状态的步骤

幸运的是,您可以在 git pull 之前返回通过使用 Git 引用日志!

这将修复错误的 pull ,并且不会有任何冲突需要解决:)

所以步骤如下:

  • 在引用日志中找到正确的提交 git reflog ,所以在 git pull 之前(注意:您可以通过键入 q 退出引用日志)
  • Git 重置为该提交,例如git reset 327fb961e --hard
  • 仔细检查并做一个 git push --force-with-lease .

  • 注意:如果您使用 git reset 出错,您可以使用 git reflog再次 :)

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

    关于Git Rebase -> 为什么在 pull 时会 merge ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58546844/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com