如何将提交移动到 git 中的暂存区?
Posted
技术标签:
【中文标题】如何将提交移动到 git 中的暂存区?【英文标题】:How do you move a commit to the staging area in git? 【发布时间】:2011-11-05 01:20:07 【问题描述】:如果您想将提交移动到暂存区域 - 即取消提交并将其中的所有更改移动到暂存区域(有效地将分支置于它之前的状态)提交) - 你是怎么做的?还是你做不到的?
我知道的最接近的方法是将提交中更改的所有文件复制到其他地方,将分支重置为提交之前的提交,然后再尝试移动到暂存区域,移动所有复制的文件回到存储库,然后将它们添加到暂存区域。它有效,但它并不是一个很好的解决方案。我想做的只是撤消提交并将其更改移动到暂存区域。可以做到吗?如果有,怎么做?
【问题讨论】:
【参考方案1】:git reset --soft HEAD^
这会将您的索引重置为HEAD^
(上一次提交),但将您的更改保留在暂存区域中。
git-reset
文档中有一些 handy diagrams
如果您使用的是 Windows,则可能需要使用此格式:
git reset --soft HEAD~1
【讨论】:
澄清一下,波浪号和胡萝卜在 git 版本中的含义不同。 HEAD~1 始终跟随提交的第一个父级,如果它是具有多个父级的合并提交,则可能不是您想要的。关于 Windows cmd shell,您只需要使用另一个 carot 来转义 carot,例如“git reset --soft HEAD^^”返回到“HEAD^”。这纯粹是 Windows cmd shell 的产物,因此如果您在 Windows 上使用 git GUI,则不必这样做。波浪号和胡萝卜在schacon.github.io/git/git-rev-parse#_specifying_revisions 解释 我为“方便的图表”添加了一个链接。你能快速检查它是否指向你想要的部分吗?谢谢 请注意,对于 Mac OS (zsh),您需要转义插入符号:git reset --soft HEAD\^
假设第一次提交是 commit1,最后一次提交是 commit4,是否可以只将提交 2 移动到暂存区?
@fall 在某种意义上来说是可能的,通过使用git rebase -i
然后git reset --soft head~1
将提交2移动到提交4之后的组合【参考方案2】:
简单的方法
提交到暂存区的文件
git reset --soft HEAD^1
暂存到 UnStage :(使用“git reset HEAD ...”取消暂存)
git reset HEAD git commands.txt
or git reset HEAD *ds.txt
这里, *--> 所有以 ds.txt 结尾的文件都取消暂存。
请参考下图清楚:
【讨论】:
我想你的意思是HEAD~1
?【参考方案3】:
将提交移回暂存区域取决于您的最后一次提交。 如果您的最后一次提交是 repo 的第一次(或初始)提交,那么您需要执行
git update-ref -d HEAD
如果您的最后一次提交不是第一次(或初始)提交,则执行
git reset HEAD~
【讨论】:
这涵盖了一种特殊情况,即您尝试移至暂存区的提交是第一次提交。以上是关于如何将提交移动到 git 中的暂存区?的主要内容,如果未能解决你的问题,请参考以下文章