【发布时间】:2017-07-27 13:28:25
【问题描述】:
我在一个分支上工作,突然我不得不切换到另一个分支来修复一个紧急的错误。问题是我对当前分支所做的更改仍然是一团糟,我不想提交它并留下一些零碎的提交消息。
有什么方法可以在不提交的情况下保存当前更改?
【问题讨论】:
我在一个分支上工作,突然我不得不切换到另一个分支来修复一个紧急的错误。问题是我对当前分支所做的更改仍然是一团糟,我不想提交它并留下一些零碎的提交消息。
有什么方法可以在不提交的情况下保存当前更改?
【问题讨论】:
是的,您可以使用 stash。
git stash
它会将所有未提交的内容保存在一个特殊区域中,您可以稍后使用它来取回它
git stash apply
您可以通过以下方式查看存储中的内容
git stash list
【讨论】:
Stash 显然有效。我只是想提出一个可行的选择,即使不是更好的选择,只提交你所拥有的一切,原因如下:
【讨论】:
git log 命令来显示存储。对我来说,它们以与提交类似的方式出现(作为图中的一个节点,并且有一个祖先提交作为父级)。关于你的第二点,这取决于你的工作流程,有些人更喜欢只提交带有非常描述性消息的小提交,其他人(比如我自己)更喜欢工作,但我们认为当时最有效,并将提交压缩为“假” 让别人容易消化的历史。对于遵循第一种方法的人来说,很容易做出他们会忘记的混乱提交。
这是受@jingx 的回答启发而设置的一个简洁的小bash 函数:
gcl() {
echo "### Adding any wip files";
git add .;
echo "### Committing files with a temporary commit";
git commit --no-verify -am 'local commit - work in progress';
echo "### Checking out branch";
git checkout "$1";
x="$(git log -1 --pretty=%B)"
if [ "$x" = "local commit - work in progress" ]; then
echo "### Undoing last commit";
git reset --soft HEAD^
else
echo "### Not undoing last commit"
fi
echo "gcl complete"
}
将其添加到您的 .bashrc 或 .profile 中,然后使用 gcl my-branch 切换分支并将您的工作保存为本地提交,同时在更改时解压缩您的本地提交。
例如,假设您使用的是 branch1 并且有未提交的更改。做一个
gcl urgent-fix
做任何你需要做的事,然后跳回去
gcl branch1
您未提交的更改将与您离开时一样。
尽管确实发生了提交,但它不会被远程推送,因此可以在本地撤消而不会产生任何后果。
【讨论】: