如何将提交移动到git中的暂存区域?

Jon*_*vis 123 git commit staging

如果要将提交移动到暂存区域 - 这是不允许的,并将其中的所有更改移动到暂存区域(有效地将分支置于提交之前的状态) - 你怎么做呢?或者是你不能做的事情?

我知道怎么做的最接近的方法是将提交中更改的所有文件复制到其他地方,在提交之前将分支重置为提交,然后尝试移动到暂存区域,移动所有将文件复制回存储库,然后将它们添加到临时区域.它有效,但它不是一个很好的解决方案.我希望能够做的只是撤消提交并将其更改为暂存区域.可以吗?如果是这样,怎么样?

Abi*_*ern 221

git reset --soft HEAD^
Run Code Online (Sandbox Code Playgroud)

这会将您的索引重置为HEAD^(上次提交),但会将更改保留在暂存区域中.

还有一些便利的图表git-reset文档

如果您使用的是Windows,则可能需要使用以下格式:

git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)

  • 如果这样做什么都没有,试试`git reset --soft HEAD~1`这意味着同样的事情,但也适用于Windows. (15认同)
  • 澄清,代字和carot在git版本中意味着不同的东西.HEAD~1始终跟在提交的第一个父级之后,如果它是具有多个父级的合并提交,则可能不是您想要的.关于Windows cmd shell,你只需要用另一个carot逃离carot,例如"git reset --soft HEAD ^^"返回"HEAD ^".这纯粹是Windows cmd shell的工件,因此如果在Windows上使用git GUI,则不必这样做.Tilde和carot在http://schacon.github.io/git/git-rev-parse#_specifying_revisions中有解释 (7认同)

San*_*pta 13

将提交移回暂存区域取决于您的最后一次提交。如果您的最后一次提交是存储库的第一次(或初始)提交,那么您需要执行

git update-ref -d HEAD
Run Code Online (Sandbox Code Playgroud)

如果您的最后一次提交不是第一次(或初始)提交,则执行

git reset HEAD~
Run Code Online (Sandbox Code Playgroud)

  • 这涵盖了一种特殊情况,其中您尝试移动到阶段的提交是第一个提交。 (3认同)

Shi*_*ari 8

一个简单的方法

  1. 提交文件到暂存区

    git reset --soft HEAD^1

  2. 暂存到 UnStage :(使用“git reset HEAD ...”取消暂存

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

在这里, *--> 所有以 ds.txt 结尾的文件都可以取消暂存。

为清楚起见,请参阅下图:

在此处输入图片说明