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

sta*_*tti 42 git version-control branch

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

有没有办法做到这一点?

sie*_*egi 53

您可以执行以下操作:

git checkout --detach
git reset --soft master
git checkout master
Run Code Online (Sandbox Code Playgroud)

说明:

如果你在debug分支机构并且会这样做,git reset --soft master你将保持工作树和索引不变,并移动到提交master点.问题是,debug也将重置为此提交.因此,您的提交debug"丢失"(嗯,不是真的,但它们不再可以直接访问)并且您仍然在debug分支机构.

要防止git reset移动debug但仍设置HEADmaster提交,首先git checkout --detachHEAD直接指向当前提交(请参阅man git-checkout"已分离的头"部分).然后你可以在不触及debug分支的情况下进行重置.

现在HEAD直接指向提交master点,即它仍然是分离的.您可以简单git checkout master地附加到master现在并准备在master分支上提交.

  • 是的,这正是我想要的.很好的解释. (4认同)
  • 这对我来说非常有用,并且感觉比`symbolic-ref`更干净,所有这些都很糟糕,它必须是3个命令...... (4认同)

CB *_*ley 47

虽然您应该小心使用此命令,但您可以重置指向master,而无需更改索引或工作树:

git symbolic-ref HEAD refs/heads/master
Run Code Online (Sandbox Code Playgroud)

您应该重置索引,以便您可以有选择地应用您的工作树更改,否则您可能最终提交master和debug分支之间的所有差异,这可能是一件坏事.

git reset
Run Code Online (Sandbox Code Playgroud)

一旦完成了要进行的提交,就可以使用以下命令返回调试分支:

git symbolic-ref HEAD refs/heads/debug-branch
git reset
Run Code Online (Sandbox Code Playgroud)


kni*_*ttl 9

您可以存储(git stash)更改,切换分支,取消暂停(git stash pop)更改,添加和提交更改.

如果您想要精确的调试状态,那么只需将debug合并到master(或将master重置为debug).

  • 重置主人并不总是健全,也不安全,建议.如果其他分支机构与主人有关系,这可能会使问题复杂化 (2认同)
  • 将`debug`合并为`master`通常不会使`master`的树与`debug`相同,除非(例如)'master`因为它们的共同祖先而没有新的开发. (2认同)