git更改分支,一些文件被修改

时间:2013-08-27 18:22:26

标签: git

我正在分支'br3'。我有3个修改过的文件。我想将它们提交给不同的分支,例如'br1'。我知道只有在树中没有修改过的文件时我才能安全地更改分支,所以我需要:

  • 复制文件,还原更改,更改分支,粘贴文件
  • 存储文件,更改分支,解冻它们

我从来没有尝试过第二种选择,我不确定它会不会有效。会吗?或者有更好的替代我上面概述的那些?

3 个答案:

答案 0 :(得分:3)

  

我知道只有在树中没有修改过的文件时我才能安全地更改分支,

这不是真的;如果更改将适用干净,它将正常工作。如果没有,你会被告知,并有机会解决它们。

你的第二个选择可能是最安全的选择:

$ git stash
$ git checkout br1
$ git stash apply
$ git add ...
$ git commit ...

但很有可能只是:

$ git checkout br1
$ git add ... 
$ git commit ...

工作得很好。

答案 1 :(得分:2)

您可以执行所谓的“合并检出”,它会尝试将您在工作树中所做的任何更改合并到目标分支中。

git checkout --merge br1

如果存在任何冲突,则必须像合并分支时那样解决它们。

我强烈建议先运行git stash && git stash apply,因为这样可以确保您可以将工作目录恢复到当前状态,以防合并失败,以至于您必须重置。如果发生这种情况并且您确实存储了更改,则可以像这样恢复工作目录,然后再试一次:

git reset --hard
git checkout br3
git stash apply

答案 2 :(得分:1)

存储和应用是一种解决方案

git stash
git checkout TARGET_BRANCH
git apply
#review and if i like it
git stash drop

在这里阅读更多相关信息: http://git-scm.com/book/en/Git-Tools-Stashing

另一个是基于差异的,也许是你已经在另一个仓库中打开的另一个分支(仓库不会从回购转到回购)。或者甚至可能在不同的盒子上!

git diff HEAD > ~/mypatch
cd SOME_OTHER_REPO 
#(or mail it to the other box or what have you and extract to ~/mypatch)
git checkout other_branch
git apply ~/mypatch