说我有两个分支A
和master
。意外地向分支A
添加并完成了一项功能(该功能还用于处于工作状态/已合并为母版,但以后需要继续使用的其他功能)。
现在,我希望从A
中删除产生新功能的提交,同时将主状态保持在当前HEAD中。理想情况是:
git checkout A
git revert HEAD~2..HEAD
但是这还不会恢复master分支的HEAD吗?
答案 0 :(得分:2)
HEAD
是指向当前活动分支的指针。
运行git checkout A
后,对HEAD
进行操作将修改A
而不是master
,
在运行git checkout master
之后,对HEAD
进行操作将修改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
答案 1 :(得分:0)
git checkout A
git reset HEAD~2
git push origin A --force
重要的是,在git reset
命令之后,您对最近两次提交的所有更改将在工作目录中可用。它为您提供了创建另一个分支并继续进行处理或在需要时隐藏的机会。
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
以指向新的分支引用index
(临时区域)index
的内容复制到您的工作目录中 git reset [<commit>]
的真正作用是什么?
HEAD
指向的分支(假设您当前在master
分支上。运行git reset [<commit>]
将使master
指向[<commit>]
)index
的内容更新HEAD
(登台区域)