我觉得这很烦人,因为我想快速切换分支并做一些事情,然后切换回我之前的工作。我意识到我可以存储然后检索存储,但是我必须每次都输入这些行:/
有什么办法可以避免这样做吗?
我也觉得这很烦人,因为我保留了大约 5 或 10 个功能分支,并且很难管理哪些有需要检索的存储,哪些可以继续工作。
我觉得这很烦人,因为我想快速切换分支并做一些事情,然后切换回我之前的工作。我意识到我可以存储然后检索存储,但是我必须每次都输入这些行:/
有什么办法可以避免这样做吗?
我也觉得这很烦人,因为我保留了大约 5 或 10 个功能分支,并且很难管理哪些有需要检索的存储,哪些可以继续工作。
使这更容易的一种方法是使用类似Legit的东西。我喜欢 Legit 的命令之一是git switch
:
$ git switch <branch> # Switches to branch. Stashes and restores unstaged changes.
Legit 使用遵循特定命名约定的描述存储存储。这样,当您使用git switch
返回到第一个分支时,它可以自动取消为该分支保存的更改。
您可以使用git checkout
's --merge
( -m
) 选项。
使用它会导致在切换分支时完成三向合并。如果发生这些,您可能需要解决合并冲突。
至于为什么会发生这种情况,手册指出
切换分支时,如果您对一个或多个在当前分支和您要切换到的分支之间不同的文件进行了本地修改,该命令将拒绝切换分支以在上下文中保留您的修改。
有关更多详细信息,请参阅git checkout
手册页
您可以使用git stash来隐藏您的更改来避免它。然后您可以更改分支,然后恢复分支并取回您的更改:
$ git stash
$ git checkout other_branch
$ git checkout original_branch
$ git stash pop
我发现自己每天都在同样的场景中:
我保留了大约 5 或 10 个功能分支,并且很难管理哪些有需要检索的存储,哪些可以继续按原样工作。
对我来说,最有效的解决方案也是最简单的(并在问题标题中提到):
提交正在进行的更改!
我总是用大写字母(遵循这个流行的标准)编写我的真实提交,并且我所有正在进行的提交都以小写字母开头,因此在我推送之前它们会立即突出显示需要交互式变基。因此,如果我需要切换分支以帮助某人解决某事,我只需提交所有更改并使用提交消息,例如:
wip:新的 CoolFeature API 的草稿
顺便说一句,如果我也离开去喝咖啡,我也可能会做出同样的承诺,即使我不打算改变分支。在正常的一天中,我会向自己承诺并写下信息,例如:
s into abcd123: First few words of that commit
f into bcde234: First few words of that commit
wip: rough draft of this thing
下次rebase -i
我会按照自己的指示(s=squash,f=fixup)。
供读者思考的问题:
答案:
1. 如果我使用“s”,这意味着我不仅要压缩,还要根据我添加到该提交的更改来修改提交消息。fixup 的“f”表示提交消息就足够了。
2. 我会定期进行分支变基,以使我的分支与我将要合并的目标保持同步。如果我碰巧在交互式 rebase 之前先这样做,我的提交 ID 会改变,但我仍然可以匹配提交标题。
这实际上是您的一个问题的解决方案,但您可以向每个存储添加一条消息,以了解哪个存储属于哪个分支。这样做你总是很容易知道哪些分支有藏匿处,哪些没有。
为此,只需使用以下命令:
git stash save -u branch1
其中 'branch1' 是您给 stash 的消息或名称