移动分支,但不覆盖已修改的文件

时间:2017-10-03 14:55:18

标签: git branch git-checkout working-directory

我在分支wip,并希望转移到分支dev。我在工作目录中有一些未提交的更改。

$ git checkout dev 
error: Your local changes to the following files would be overwritten by checkout:
        .idea/runConfigurations/celery_beat.xml
Please, commit your changes or stash them before you can switch branches.
Aborting

好的,我明白了:那个文件不会合并。而且我不想失去对它的改变。我想要的是:

  1. 查看开发分支
  2. 对于无法合并的文件,请将版本保留在我的工作目录中(不要尝试合并)
  3. 或者,我有时想要这个:

    1. 查看开发分支
    2. 不要覆盖工作目录中有任何变化的任何文件。也就是说,我在wip分支中的非编译文件应该保持原样,其余的工作目录应该从dev分支填充。一个简单的git diff将告诉我移动到dev分支后我有什么变化。
    3. 修改

      我现在解决这个问题的方法是:

      1. git status
      2. 获取已更改文件的列表
      3. 将这些文件复制到repo之外的某个地方
      4. git checkout -- .
      5. git checkout dev
      6. 将这些文件存回到回购
      7. git diff现在向我提供与dev
      8. 相比的更改

        git是否有内置机制来执行此操作?

1 个答案:

答案 0 :(得分:1)

#stash the changes to ".idea/runConfigurations/celery_beat.xml"
git stash

#switch to dev without conflicts or overwriting
git checkout dev

#restore ".idea/runConfigurations/celery_beat.xml" to the version before the switch
git checkout stash@{0} -- .idea/runConfigurations/celery_beat.xml

#now ".idea/runConfigurations/celery_beat.xml" is staged, in order to remove it from the index:
git reset HEAD -- .idea/runConfigurations/celery_beat.xml

#if you'd like to drop the stash entry
git stash drop

但我还是要说,追踪.idea并不是一个好主意。