Git 切换分支,但保留修改的文件



切换到其他分支时,当我有未提交的更改时,可能会出现冲突。我想切换分支,但保持修改后的文件原样,而不是提交更改或使用 git stash(这可能会导致冲突)。

这种方式对于我使用的工作流程更直观,因为更改的文件通常代表文件的最新版本。有时我会切换到另一个分支来提交一个小的更改。我还不想在当前分支上提交我的更改,因为它们尚未完成。次要更改可能是需要在具有部分提交的其他分支上提交的单个函数,而同一文件中的其他更改应保持原样。另外,我不想使用存储,因为在另一个分支上应用存储可能会导致冲突。此外,有一两次,我忘记应用隐藏的更改,并且由于害怕丢失数据,我通常不会丢弃存储。由于我使用了许多临时分支,这会导致历史记录混乱,其中引用了我已经删除的分支。

我知道这在技术上是可行的,因为我可以创建所有已修改文件的临时副本,重置工作副本,切换到另一个分支并将临时文件移动到工作副本。所以我可以创建一个函数来做到这一点。但是有没有已经可用或更简单的解决方案?

我写了两个脚本来实现我的目标。到目前为止,它们工作正常。使用git-switch您可以切换到分支,它将保持所有已修改文件的内容不变。它基于gitstash,如果修改了完整的文件,也可以通过覆盖当前文件来恢复它们。

git switch mybranch2

与以下相同:

gitstash stash myStash
git switch mybranch2
gitstash pop myStash

gitstash在进行交互式变基时也很有用。您可以使用它来保存更改,然后执行变基,并像以前一样还原文件。然后,您可以简单地保持文件原样,而不解决冲突。如果您在变基期间所做的更改未反映在当前存储的版本中,则可以使用 smartgit 或 eclipse 等工具将文件与 HEAD 修订版进行比较并包含更改。根据我的经验,这更舒适,因为您不必删除任何冲突标记。此外,您可以应用包含gitstash apply myStash的存储或列出带有 gitstash list 的可用存储。

优势:

  • 切换分支时,请始终保留文件的当前版本。

  • 无需手动git stash更改。

  • 无需解决冲突。

  • 变基后避免冲突标记。

git-switch:https://gist.github.com/anonymous/7f9e457335ff1d9f4c24

吉斯塔什:https://gist.github.com/joe42/984fb415942b67ddf70f

最新更新