修改工作,完全是?
我已经看到GIT提交 - 以分离的HEAD状态进行游戏。 这个问题要求答案比需要更复杂。 我想了解git commit --amend
在正常情况下的工作方式。
假设您处于干净的工作状态,并且您的回购看起来如下所示:
如果你然后运行
git commit --amend
编写提交信息,保存并退出编辑器,会发生以下情况:
f42c5
相同 - 用于创建新的提交: 31b8e
。 它的父代将与您正在修改的提交(那些)相同: f42c5
。 master
分支引用被移动以指向新提交( 31b8e
)。 HEAD
参考跟随master
。 请注意,修改后的提交( f42c5
)现在无法从您的f42c5
任何参考(因此其图形上的“透明”样式)无法访问。 它仍然存在于你的存储库的对象数据库中,但是当Git运行周期性的内务管理时,或者如果通过运行git gc
(垃圾回收)显式触发它,它最终会被删除。
附录 (基于Jason Baker的评论):请注意,只要修改的提交f42c5
仍然存在于您的repo中,并且您有一种方法可以找到它的提交ID(例如,通过将其提取出master
分支的引用日志),你仍然可以检查出来。 运行
git checkout master # just to be sure that master is the current branch
git reset --hard f42c5
或者(假设您在此期间还没有对master
进行任何新的提交,重置master
或以其他方式移动了master
分支引用)
git checkout master # just to be sure that master is the current branch
git reset --hard master@{1}
会让你处于以下情况:
但现在,提交31b8e
将变得无法访问。
假设你刚刚承诺“B”
... --- A --- B
^
|
master
HEAD
修改“B”将创建一个并行提交,并成为新的分支头。
+---- B
|
... --- A --- B'
^
|
master
HEAD
B'是由来自B的更改加上您在发出git commit --amend
时执行的更改所产生的git commit --amend
。
据我所知,这样ammend
有效的:
对于git commit --ammend
作品,修改必须进入Stagging Area(SA)
git reset -- soft
将上一次提交(提交给ammend)提交的更改带回SA,并将索引移动到先前的提交(在提交之前提交以进行修改)。 在使用git commit
命令之前,一切都保持了。 git add
所有文件以添加到新的提交中(这将是推荐的提交)。 要添加的文件是在git reset --soft
之前进入SA的文件git reset --soft
已着陆,重置后此文件将保存到WD中,因此需要将它们添加到SA以生成受支持的提交。 如果使用--no-edit
注释在被修正的提交中被重用,否则你必须引入新的注释(因为它是一个新的提交并且每个提交都需要注释)。
有关Stagging Area和Working Directory的更多信息,请参阅Reset Demystified
链接地址: http://www.djcxy.com/p/8777.html上一篇: amend work, exactly?