gpt4 book ai didi

git - 仅还原特定分支的提交,同时保留 "merged data"

转载 作者:行者123 更新时间:2023-12-05 01:39:54 25 4
gpt4 key购买 nike

假设我有两个分支 Amaster。不小心将一个功能添加并完成到分支 A(它也在处理处于工作状态/merge 到 master 但需要稍后继续的不同功能)。

现在我希望从 A 中删除产生新功能的提交,同时将主状态保留在当前 HEAD 中。理想情况下是这样的:

git checkout A
git revert HEAD~2..HEAD

然而,这不会也恢复 master 分支的 HEAD 吗?

最佳答案

重写历史的解决方案:

git checkout A
git reset HEAD~2
git push origin A --force

重要的是在git reset之后命令您对最近两次提交的所有更改都将在工作目录中可用。它让您有机会创建另一个分支并继续处理它或在需要时 stash 它。

不重写历史的解决方案:

git checkout A
# automatically commits
git revert HEAD~2..HEAD
git push origin A

git checkout A

# doesn't commit automatically
git revert --no-commit HEAD~2..HEAD

git commit -m 'Revert two last commits'
git push origin A

它将添加一个新的提交来扭转最近两次提交的影响。

以上所有解决方案都没有改变master分支!

理论:

HEAD是指向当前分支引用的指针,它又是指向该分支上最后一次提交的指针。

什么是git checkout [<branch>]真的吗?

  • 更改 HEAD指向新分支ref
  • 填充您的 index (暂存区)带有该提交的快照
  • 复制 index 的内容进入你的工作目录

什么是git reset [<commit>]真的吗?

  • 移动HEAD的分支指向(假设您当前在 master 分支上。运行 git reset [<commit>] 将使 master 指向 [<commit>] )
  • 更新index (暂存区)包含快照的内容 HEAD指向

关于git - 仅还原特定分支的提交,同时保留 "merged data",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57516618/

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