我曾见过'git commit --amend' in detached HEAD state。这个问题需要比所需更为复杂的答案。
我想要了解在正常的HEAD状态下
我想要了解在正常的HEAD状态下
git commit --amend
是如何工作的。git commit --amend
是如何工作的。如果你接着运行
git commit --amend
编写提交信息,保存并退出编辑器后,会发生以下情况:
git gc
(垃圾回收)显式触发时,它最终将被永久删除。
附录(基于Jason Baker的评论):请注意,只要修改后的提交f42c5仍然存在于您的存储库中,并且您有一种找到其提交ID的方法(例如,从master分支的reflog中找出它),您仍然可以检查它。运行
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现在将无法到达。
checkout
或者通过reflog
回到f42c5
吗?我承认这样做可能很愚蠢,但我很好奇是否可以访问旧的提交记录。 - Jason Bakergit reset
总是 重置当前分支(这意味着HEAD
不能分离)。先放checkout master
等命令。 - torek:)
- jub0bs假设你刚刚犯了“B”的错误
... --- A --- B
^
|
master
HEAD
修改“B”将创建一个平行提交,该提交成为新的分支头。
+---- B
|
... --- A --- B'
^
|
master
HEAD
B'是由B中的更改和您在执行git commit --amend
时暂存的更改组合而成的提交。
B'
是由从B
中的更改与您在执行git commit --amend
时暂存的更改组合而成的提交。对我来说非常重要。直到现在,我只使用git commit --amend
来更改提交消息。我不知道我可以使用git commit --amend
来更新提交中的更改。 - bit-C HEAD
(而不是-m'...'
)来避免改变信息。 - ikegami-C HEAD
(而不是-m'...'
)来避免改变信息。 - undefinedgit commit --amend
,要修正的更改必须位于暂存区(SA)中。
git reset --soft
,将上次提交的更改(待修正的提交)恢复到暂存区,并将索引移动到前一个提交(待修正的提交之前的提交)。所有内容保持在使用 git commit
命令之前的状态。git add
将所有文件添加到新的提交(即修正后的提交)。要添加的文件是在执行 git reset --soft
命令之前位于暂存区的文件,在重置之后这些文件仍然保存在工作目录(WD)中,因此需要将它们添加到暂存区以生成修正后的提交。git commit --amend
不应与已推送的提交一起使用。--no-edit
,则注释将在修改的提交中被重用,否则您必须引入一个新的注释(因为它是一个新的提交,每个提交都需要一个注释)。git add test1.txt && git commit -m “test1.txt and test2.txt “
后来你想起来忘记添加test2.txt了 所以你想要添加丢失的test2.txt文件并修改之前的提交 git add test2.txt
git commit --amend -m "test1.txt & test2.txt added"
git log [to see that the previous commit message updated and test2.txt file added]