首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git commit --commit到底是如何工作的?

git commit --commit到底是如何工作的?
EN

Stack Overflow用户
提问于 2014-09-26 08:43:05
回答 3查看 11.4K关注 0票数 18

我见过GIT commit --amend in detached HEAD state了。这个问题要求答案比需要的更复杂。我想了解一下git commit --amend在正常的头部情况下是如何工作的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-26 08:53:12

假设您处于干净的工作状态,并且您的存储库如下所示:

如果您随后运行

代码语言:javascript
复制
git commit --amend

编写一条提交消息,保存并退出编辑器,将发生以下情况:

提交你的提交区域-如果你还没有提交任何新的更改,它将与用来创建一个新的提交的提交f42c5-is相同:31b8e。它的父级将与您正在修改的提交的父级相同:移动f42c5.

  • The (31b8e).

  • The分支引用以指向master.

后面的新提交master. master HEAD引用

请注意,修改后的提交(f42c5)现在不能从您的repo中的任何引用中访问(因此它在我的图中是“透明的”风格)。它仍然存在于存储库的对象数据库中,但最终将被永久删除,当Git运行其定期内务管理时,或者如果您通过运行git gc (垃圾收集)显式地触发它。

附录(基于Jason Baker's comment):请注意,只要修改后的提交f42c5仍然存在于您的存储库中,并且您有办法找出它的提交ID (例如,通过从master分支的reflog中获取它),您仍然可以检查它。正在运行

代码语言:javascript
复制
git checkout master # just to be sure that master is the current branch
git reset --hard f42c5

或者(假设在此期间,您没有在master上进行任何新的提交,重置master,或者移动master分支引用)

代码语言:javascript
复制
git checkout master # just to be sure that master is the current branch
git reset --hard master@{1}

会让你陷入如下境地:

但现在,提交31b8e将变得无法访问。

票数 32
EN

Stack Overflow用户

发布于 2014-09-26 08:46:54

假设你刚刚提交了"B“

代码语言:javascript
复制
... --- A --- B
              ^
              |
            master
             HEAD

修改"B“将创建一个并行提交,它将成为新的分支头。

代码语言:javascript
复制
        +---- B
        |
... --- A --- B'
              ^
              |
            master
             HEAD

B‘是B中的更改加上您在发出git commit --amend时暂存的更改的组合所产生的提交。

票数 8
EN

Stack Overflow用户

发布于 2017-10-17 23:50:13

据我所知,amend的工作原理如下:

对于git commit --amend工程,需要修改的更改必须位于参差区(SA)中

  1. 它使git reset -- soft用于将在最后一次提交(提交到修改)中提交的更改带回SA,并将索引移动到前一次提交(提交之前修改)。一切保持在git commit命令被使用之前的样子。
  2. 它使所有的文件添加到新的提交中(这将是修改后的git add )。要添加的文件是那些在git reset --soft登陆之前已经进入SA的文件,在重置之后这些文件被keept到WD中,因此有必要将它们添加到SA以生成修正的commit.
  3. Makes git提交。它将为修改后提交生成新的提交,并因此生成新的id。为此,git commit --amend不应该与pushed

一起使用

如果你使用--no-edit,注释将在修改后的提交中被重用,否则你必须引入一个新的注释(因为它是一个新的提交,并且每次提交都需要一个注释)。

有关参差区和工作目录的详细信息,请参阅Reset Demystified

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26050327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档