问题:
我在我的临时区域添加了一些文件。我想暂时保存这些信息。怎么样?
背景
有时我会进行更大的重构。提交完整的结果才真正有意义
在这个重构过程中,我还做了一些我想独立提交的无关更改
例如,重构重命名了一个方法。无关的更改修复了同一类中另一个方法的一个参数的拼写错误
现在,假设当我意识到我忘记事先提交了一个不相关的更改时,我已经将大部分文件添加到临时区域。
将文件添加到临时区域需要时间,因为我检查每个文件以确保我真的只提交我想要的东西。因此,简单地将它们全部从暂存区域中移除不是解决方案
我想做的是:
这有可能吗?
另一种解决方案是多个临时区域的可能性,但我不认为这是可能的。
答案 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}
编辑:
正如@ nevik-rehnel在评论中所说,你也可以使用互动添加。
取消所有内容,使用git add -p
暂存不相关的更改,提交,然后重新启动所有内容。
答案 2 :(得分:0)
为什么不能将它保存为分支并启动新分支
答案 3 :(得分:0)
这似乎有效:
答案 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