Git rebase:我必须先有一个干净的工作目录吗?

Git rebase: do I have to have a clean working directory first?

前段时间拉了master。然后我从 master 创建了一个分支,branch1。我在 branch1 中做了很多工作。我有几次提交,自上次提交以来,我更改了很多文件并添加了新文件,可能删除了一些文件。所以我的工作目录目前不干净。

其他人现在已经将一堆更改合并到服务器上的 master 中,我需要将这些更改拉到 master 并重新设置我的工作。

为了将 branch1 变基到最新的 master,我需要一个干净的工作目录吗?换句话说,我需要在 rebase 之前提交我当前的工作吗?我不清楚这是如何工作的。

是的,在变基之前你应该有一个干净的工作目录(或者如果你打算签出主目录则切换分支)。实现这一点的最简单方法就是提交你现在拥有的任何东西。请注意,如果您还没有准备好提交也没关系,因为它还没有完成。只需将您的提交消息设置为提醒您尚未完成的内容即可。例如,我使用“wip - 此处的一些快速注释”。由于我 总是 以大写字母开始我的实际提交标题,我使用小写字母向我表明我需要 rebase/amend/reword 在创建之前提交我的请求请求。如果出于某种原因你坚决反对提交未完成的工作(我想不出任何好的理由),那么你可以隐藏你的更改以获得一个干净的目录。

提示: 删除本地主分支,因为您(可能)永远不需要它。如果你想变基到 master,你不需要做你暗示你要做的事情,那就是:结帐 master,提取更改,然后结帐你的分支,然后变基到 master。相反,只需 git 获取,然后变基到 origin/master。它的速度要快得多,并且可以达到相同的结果。任何时候你想从 master 创建一个新分支,git fetch,然后从 origin/master.

创建你的分支

忘记清洁人员,您只需要 git pull --rebase --autostash。这将自动存储您当前的工作以获得一个干净的工作目录(基于您上次提交),然后从远程重新设置您当前的分支,而不是弹出存储的内容。

这个命令 开箱即用 ,无论工作目录是否干净。

如果你 运行 遇到一些冲突,请记住这个命令等同于

git stash
git pull --rebase
git stash pop

并像往常一样解决它。