13

问:
我在暂存区添加了一些文件。我想暂时保存这些信息。如何?

背景:
有时我会执行一些更大的重构。提交完整的结果才真正有意义。
在此重构期间,我还进行了一些我想独立提交的不相关更改。
例如,重构重命名了一个方法。不相关的更改修复了同一类中另一个方法的一个参数的拼写错误。
现在,假设当我意识到我忘记事先提交一项不相关的更改时,我已经将大部分文件添加到暂存区域。
将文件添加到暂存区需要时间,因为我检查每个文件以确保我真的只提交我想要的。因此,简单地将它们全部从暂存区移除并不是解决方案。
我想做的是:

  1. 保存暂存区的当前状态
  2. 删除所有暂存文件
  3. 分阶段进行不相关的更改
  4. 提交不相关的更改
  5. 将保存的状态重新应用到暂存区域。

这有可能吗?

另一种解决方案是多个暂存区的可能性,但我认为这是不可能的。

4

5 回答 5

15

以下命令链应该可以解决问题

git commit -m "temporary" # save current stage are as an actual commit
git commit unrelated_files -m "The other feature"
git stash # hide the rest
git rebase -i HEAD~2 # change the order of two last commits
git reset HEAD^ # rollback the "temporary" commit
git add . # add everything from that commit back to staging
git stash pop # and return back all initially unstaged stuff
于 2013-02-23T12:32:53.000 回答
2

你肯定需要git stash

这将保存您当前的工作,并保留您的目录,就像您对 HEAD 进行了重置一样。您现在可以切换分支,在另一个主题上做一些工作。

当您准备好再次使用您的功能时,重新应用您隐藏的更改git stash apply

您可以组合多个存储,git stash list将它们列出,然后您可以选择要应用的一个,例如git stash apply @{1}

编辑 :

正如@nevik-rehnel 在评论中所说,您也可以使用交互式添加。

取消暂存所有内容,用于暂存git add -p不相关的更改,提交,然后重新暂存所有内容。

于 2013-02-22T09:07:58.883 回答
1

为什么不能将它保存为分支并启动一个新分支

于 2013-02-23T12:15:38.647 回答
0

这似乎有效:

  • git commit -m “临时”
  • git stash -u
  • git重置头^
  • git stash save "MeepMeep!"
  • git stash pop stash@{1}
于 2013-11-05T17:56:46.500 回答
0

这是一种在不中断当前工作的情况下保存状态的方法。

git add . # OR whatever you want to add
git commit -m "saved state"
git log

将最后一次提交的哈希复制到剪贴板,将其粘贴到笔记中。

git checkout -b saved_State_Holder  
git cherry-pick <copiedHash>
git checkout <yourOriginalBranch> 
git reset --soft HEAD~1 # To keep your commit history clean
git reset # to unstage the changes

现在,每当您想访问该状态时,只需打开您的笔记,复制所需的哈希,然后运行以下命令:

git cherry-pick <copiedHash> # applies that state
git reset --soft HEAD~1 # Optional if you want to pick and choose changes
git reset 
于 2018-11-08T07:52:45.410 回答