我正在分支'br3'上工作。我有 3 个修改过的文件。我想将它们提交到不同的分支,例如'br1'。我知道只有在树中没有修改过的文件时才能安全地更改分支,所以我需要:
- 复制文件、还原更改、更改分支、粘贴文件
- 存储文件,更改分支,取消存储它们
我从未尝试过第二种选择,我不确定它是否会奏效。会吗?或者有比我上面概述的更好的选择?
我正在分支'br3'上工作。我有 3 个修改过的文件。我想将它们提交到不同的分支,例如'br1'。我知道只有在树中没有修改过的文件时才能安全地更改分支,所以我需要:
我从未尝试过第二种选择,我不确定它是否会奏效。会吗?或者有比我上面概述的更好的选择?
我知道只有在树中没有修改过的文件时才能安全地更改分支,
这不是真的。如果更改将干净地应用,它将正常工作。如果没有,您会被告知并有机会修复它们。
您的第二个选择可能是最安全的:
$ git stash
$ git checkout br1
$ git stash apply
$ git add ...
$ git commit ...
但很可能只是:
$ git checkout br1
$ git add ...
$ git commit ...
会工作得很好。
您可以执行所谓的“合并签出”,它会尝试将您在工作树中所做的任何更改合并到目标分支中。
git checkout --merge br1
如果有任何冲突,那么您必须像合并分支时一样解决它们。
我强烈建议git stash && git stash apply
先运行,因为这将确保您可以将工作目录返回到其当前状态,以防合并严重失败以至于您必须重置。如果发生这种情况并且您确实存储了更改,则可以像这样恢复工作目录,然后重试:
git reset --hard
git checkout br3
git stash apply
存储和应用是一种解决方案
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