如何保存我的临时区域的当前状态?

时间:2013-02-22 08:55:59

标签: git

问题:
我在我的临时区域添加了一些文件。我想暂时保存这些信息。怎么样?

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

  1. 保存暂存区的当前状态
  2. 删除所有暂存的文件
  3. 暂停无关的更改
  4. 提交无关的更改
  5. 将已保存的状态重新应用到暂存区域。
  6. 这有可能吗?

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

5 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:2)

你肯定需要git stash

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

当您准备好再次使用您的功能时,请使用git stash apply

重新应用您的隐藏更改

您可以合并多个藏匿处,git stash list会列出它们,然后您可以选择要应用哪一个,例如git stash apply @{1}

编辑:

正如@ n​​evik-rehnel在评论中所说,你也可以使用互动添加。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这似乎有效:

  • git commit -m“temp”
  • git stash -u
  • git reset HEAD ^
  • git stash save“MeepMeep!”
  • git stash pop stash @ {1}

答案 4 :(得分: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