通常我会遇到这样的情况,我进行了一些本地改动,结果发现我在错误的分支上进行了修改,因此在提交之前需要切换分支。问题是当本地存在更改时,无法切换分支。是否有任何方法可以解决这个问题?
显然,我可以复制更新后的文件,切换分支,然后将它们复制回来,但这似乎并不聪明!
通常我会遇到这样的情况,我进行了一些本地改动,结果发现我在错误的分支上进行了修改,因此在提交之前需要切换分支。问题是当本地存在更改时,无法切换分支。是否有任何方法可以解决这个问题?
显然,我可以复制更新后的文件,切换分支,然后将它们复制回来,但这似乎并不聪明!
如果你本地有修改但与两个分支之间的差异不冲突,那么可以在切换分支时进行。如果存在冲突,则可以使用 -m
或 --merge
选项执行 checkout
命令进行切换,并在修改和切换分支所引起的更改之间执行合并操作。
git checkout -m other-branch
当出现这种情况时,我使用git stash
。它会创建一个当前工作副本状态(包括缓存和未缓存的文件)的临时提交,并将工作副本还原为当前HEAD。然后您可以切换到其他分支并执行git stash pop
。
$ git clone /path/to/repository repository.clone
$ cd repository.clone
$ git remote add origin repository.clone
$ git fetch origin
$ cd /path/to/repository
$ git add path/to/modified/files
$ git commit -m 'Commit message'
$ cd ../repository.clone
$ git fetch origin
$ git checkout correct-branch
$ git reset --hard origin/correct-branch
$ git cherry-pick origin/current-branch
$ # resolve conflicts if any, commit with -c option in this case
$ git push origin correct-branch:correct-branch
接下来,在原始代码库上,您需要删除临时提交,并删除相关的修改(除非您想在两个分支中都保留它们)。
$ cd /path/to/repository
$ git reset HEAD^
$ # edit file and remove modifications moved to other branch
这更加复杂并涉及历史重写,但是当你的项目非常大且编译时间是一个限制因素时,了解这种技术可以帮助你。请注意,您可以重用克隆的存储库,因此每次无需删除/重新创建它(如果编译时间很长,则存储库可能很大,并且克隆可能需要一些时间)。