使用未提交的更改优雅地切换分支

时间:2018-06-09 02:32:09

标签: git-checkout

在并行处理多个功能分支时,我需要stashcommit本地更改才能切换到另一个分支。我认为藏匿和承诺对我来说都很笨拙。有更优雅的选择吗?

为什么stash笨拙:我在多个分支上工作,并不时在它们之间切换。有时我最终会忘记弹出或弹出错误的藏匿处。

为什么commit笨拙:我的更改正在进行中。它们不完整,不应该承诺。我最终做的是首先提交它们(因为我被迫),然后进行软复位,以便我之前的提交回到"本地更改"。或者,有时我会让临时提交堆积起来并在以后进行交互式变换。

我正在寻找的东西:像一个" smart stash"。当我切换到另一个分支时自动存储本地更改,并在切换回时自动弹出与该分支关联的存储。这可以吗?

2 个答案:

答案 0 :(得分:1)

我的解决方案是为正在进行的工作创建一个临时提交,并且在切换分支之前对于每个未提交的工作状态保存,始终使用 git commit --amend--amend 标志允许您创建一个提交,替换当前指向分支的提交(在我们的例子中,是一个不严肃的、正在进行的提交),而不是创建额外的提交最重要的。每次使用 --amend 提交时,您的提交消息实际上可能是“NO COMMIT”以提醒自己这一点。然后你就可以忘记 Git 的所有复杂性,把 commit --amend 想象成一个很好的旧 SAVE 按钮,它可以让你一次又一次地覆盖你以前的文件(非严重提交),不留下额外的痕迹。< /p>

当你工作得足够多并决定这个不严肃的、保存状态的提交应该成为一个真正的提交时,那么只需 git commit 而没有 --amend,然后最重要的是,创建下一个不严肃的提交消息“NO COMMIT”

我想这是为那些必须经常在不同分支之间跳转的人保存正在进行的工作的最简单方法。

答案 1 :(得分:0)

另一种方法是使用git worktree, which allows you to have multiple working directories

这样,切换分支可能意味着仅使当前工作保持原样,然后更改文件夹。
无需自动隐藏/提交。

该方法的缺点可能是:

  • 磁盘空间(如果您的项目确实是巨大
  • 工具配置(您的IDE需要从不同的路径加载相同的项目,通常可以通过IDE工作区来加载)