我目前在调试分支上,并且想要切换到主分支,而不修改工作树(保持它在调试分支中的方式),所以我可以将一些更改提交到主服务器分支。
有办法做到这一点吗?
答案 0 :(得分:47)
您可以执行以下操作:
git checkout --detach
git reset --soft master
git checkout master
说明:
如果您在debug
分支上并且git reset --soft master
,您将保持工作树和索引不变,并转到提交master
点。问题是,debug
也将重置为此提交。因此,debug
上的提交“丢失”(嗯,不是真的,但它们不再可以直接访问)并且您仍然在debug
分支上。
为防止git reset
移动debug
但仍将HEAD
设置为master
提交,您首先git checkout --detach
指向HEAD
直接到你当前的提交(参见man git-checkout
,“脱离头”部分)。然后,您可以在不触及debug
分支的情况下进行重置。
现在HEAD
直接指向提交master
点,即它仍然是分离的。您只需git checkout master
即可附加到master
,现在可以在master
分支上提交。
答案 1 :(得分:46)
这个答案使用低级“管道”命令。小心。如果您更喜欢“porcelain”命令,请使用生成相同结果的this answer。
您可以将头部重置为指向主人,而无需使用以下内容更改索引或工作树
git symbolic-ref HEAD refs/heads/master
您应该重置索引,以便可以有选择地应用您的工作树更改,否则您可能最终提交master和debug分支之间的所有差异,这可能是一件坏事。
git reset
完成要进行的提交后,可以使用以下命令返回调试分支:
git symbolic-ref HEAD refs/heads/debug-branch
git reset
答案 2 :(得分:9)
您可以存储(git stash
)您的更改,切换分支,解压缩(git stash pop
)您的更改,添加和提交更改。
如果您想要精确的调试状态,那么只需将debug合并到master(或将master重置为debug)。
答案 3 :(得分:3)
这是一个原始工作流程
git stash
git checkout otherbranch
git stash apply
git reset
git add # interactively? just add the hunks/changes you want to commit
git commit
回去
git reset --hard # watch it here! make sure you haven't added more changes that you wanted to keep
git checkout debug
git stash pop
或者,您可以在此处提交相关更改并将/ cherry-pick引入主分支。
答案 4 :(得分:-1)
据我所知,你不能。分支切换意味着将工作副本中的代码版本检入该分支的HEAD中。
您希望merge
您的分支机构。做
git checkout master
git merge devel
分支现在将被同步。如果要合并更改的子集,可以指定提交或提交范围。 另请查看cherry-pick 例如:
git checkout master
git cherry-pick devel
将devel中的最后一次提交合并回master。
如果您需要合并位于不同主机上的两个分支,请查看git pull和git push。