切换分支而不触及工作树?

时间:2011-05-20 09:50:00

标签: git version-control branch

我目前在调试分支上,并且想要切换到主分支,而不修改工作树(保持它在调试分支中的方式),所以我可以将一些更改提交到主服务器分支。

有办法做到这一点吗?

5 个答案:

答案 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。