我的问题的想法是研究...和
之间的本质区别是什么commit --amendreset --soft
调查过程分步骤:
vim index.js > edit > save
git add index.js
git commit -m '...'
git push origin
Run Code Online (Sandbox Code Playgroud)
现在我需要重写之前发送的提交。为此,我应该使用:
vim index.js > edit > save
git add index.js
git commit --amend --no-edit
git push --force origin
Run Code Online (Sandbox Code Playgroud)
本质上,我还有另一个 SHA1,为了类比目录objects中的3 .git/objects,但git log显示了两个 SHA1,我完全同意它,因为提交已被修改。
让我们回顾一下。HEAD 指针代表文件的版本,而不是git commit --amend我执行了,编写一些代码并执行:git reset --soft HEAD~stage
git add index.js > git commit -m '...' > git push --force origin
Run Code Online (Sandbox Code Playgroud)
.git/objects 目录又包含一个 SHA1,但历史记录已用新的 SHA1 进行了修改。
所以我所说的命令git commit --amend和git reset --soft具有相同的行为
还是我不对?
这两个命令都可以用来实现类似的最终目标,但它们做的事情不同。 git commit --amend使用阶段中的任何内容进行新的提交,并且该新的提交将替换分支的前一个 HEAD 的任何提交。
另一方面,git reset --soft将分支的 HEAD 指针移回一次提交,但保持阶段和工作目录不变。这会导致您的分支现在似乎位于上一个提交上,但您为生成旧 HEAD 提交所做的所有工作现在都显示为正在暂存。如果您现在更改工作目录中的内容,暂存这些更改并提交,您还将进行新的提交来替换旧的 HEAD,这与git commit --amend.
git reset --soft与相比(与说相同git reset --soft HEAD~1)的一个优点git commit --amend是前者可以在多个提交之间重置。如果您想重写分支中的最新 4 次提交,这会很有用。另一方面,git commit --amend这是一个单马表演,并且仅适用于 HEAD 提交。
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |