我正在分支'br3'。我有3个修改过的文件。我想将它们提交给不同的分支,例如'br1'。我知道只有在树中没有修改过的文件时我才能安全地更改分支,所以我需要:
我从来没有尝试过第二种选择,我不确定它会不会有效。会吗?或者有更好的替代我上面概述的那些?
答案 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