Git 仅恢复特定分支的提交,同时保留;“合并数据”;

Git 仅恢复特定分支的提交,同时保留;“合并数据”;,git,git-revert,Git,Git Revert,假设我有两个分支A和master。某个功能意外添加并完成到分支A(该分支也正在处理处于工作状态/合并到主功能但需要稍后继续的其他功能) 现在我想从A中删除产生新特性的提交,同时将主状态保留在当前头部。理想的情况是: git checkout A git revert HEAD~2..HEAD 但是,这不也会还原主分支的头吗?头是指向当前活动分支的指针 在运行git checkout A后,对头部执行操作将修改A,而不是master, 在运行git checkout master之后,对头执行操

假设我有两个分支
A
master
。某个功能意外添加并完成到分支
A
(该分支也正在处理处于工作状态/合并到主功能但需要稍后继续的其他功能)

现在我想从
A
中删除产生新特性的提交,同时将主状态保留在当前头部。理想的情况是:

git checkout A
git revert HEAD~2..HEAD

但是,这不也会还原主分支的头吗?

头是指向当前活动分支的指针

在运行
git checkout A
后,对
头部执行操作将修改
A
,而不是
master

在运行
git checkout master
之后,对
头执行操作将修改
master
而不是
A


另请注意:

如果您打算“取消分支
A
的最后两次提交”,则可以运行:

git checkout A
git reset --hard HEAD~2

# if branch A was pushed,
# you will also need to push the corrected A :
git push origin --force-with-lease A
具有重写历史记录的解决方案: 一件重要的事情是,在执行
git reset
命令后,您最近两次提交的所有更改都将在工作目录中可用。它让您有机会创建另一个分支,并在需要时继续工作或隐藏

不重写历史记录的解决方案: 或

它将添加一个新的提交,以反转最近两次提交的效果

以上所有解决方案都不会改变
master
branch! 理论:
HEAD
是指向当前分支引用的指针,而当前分支引用又是指向该分支上最后一次提交的指针

git checkout[]
真正做什么

  • 更改
    头部
    以指向新的分支参考
  • 用提交的快照填充
    索引(暂存区域)
  • 索引的内容复制到工作目录中
git reset[]
真正做什么

  • 移动
    HEAD
    指向的分支(假设您当前在
    master
    分支上。运行
    git reset[]
    将使
    master
    指向
    []
  • 使用快照
    头的内容更新
    索引
    (暂存区)
    指向

我确实推了一个(和主控)-我可以在不重写历史的情况下进行还原吗?两个还原的提交之一是从
master
合并到
A
?如果可以运行
重置--hard
,这会重写历史,事情会更简单。如果这违反了一个严格的要求,您可以运行
revert
命令,但稍后当
a
合并到
master
中时,请仔细检查
master
中的内容。首先,不要问我们会发生什么。告诉我们你想发生什么。我理解你的问题的方式是,你有一个分支,a,你(意外地)添加了一些不相关的东西,然后你将a合并到master。现在,您希望从中恢复/撤消/删除不相关的内容,但希望将其保留在主控上。我理解得对吗?@LasseVågsætherKarlsen-是的,但更重要的是,我希望了解“恢复”之类的东西是如何与分支一起工作的。它们是在单个分支上工作还是同时还原其他分支。还原只会添加另一个与您正在还原的提交相反的提交。如果原始提交添加了一行,则恢复提交将删除该行,依此类推。还原会添加另一个提交,您需要自己将该提交合并到相关的分支中。Revert不能将提交插入历史记录,也不能更改原始提交,因此它会影响您希望它影响的分支。
git checkout A
git reset HEAD~2
git push origin A --force
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