是否存在git checkout -m的变体,它不会切换您的分支

时间:2014-08-20 17:31:47

标签: git

在git中,是否有一个像git checkout -m <commit>一样的命令,但是没有分离HEAD?

我有一个脏工作目录,并希望在传入提交之上对其进行rebase。 git checkout -m <commit>完成大部分内容,但因为我想重新附加HEAD,我需要执行echo 'ref: refs/head/<old-branch>' > .git/HEAD。没有这个你能做到吗?

旧:
例如,我可以在工作目录和<commit>之间开始合并,并保留在当前分支上。

3 个答案:

答案 0 :(得分:1)

是的,只需点击你的顶级目录并添加“。”在结帐命令结束时。例如,假设你是master,你想从dev中获取更改,但不创建新的提交,也不需要切换到dev。然后你可以输入:

git checkout dev .

。只是说从dev分支获取哪些文件,在你的情况下你想要所有的东西,所以你只需指定当前的目录。 (这就是为什么你想要在你做这个时进入顶级回购目录的原因)

你会看到你现在还在使用master,但是你可以将dev的更改作为未提交的修改文件。

请注意,这不会尝试任何类型的合并或重新定位,它只是从其他分支中提取文件。

如果你想将东西合并到一个脏分支中,我强烈建议将你的污垢提交到一个临时分支然后进行定期合并。这样你就不会冒失去任何工作的风险,如果你不喜欢你所看到的,你总是可以放弃临时分支。

答案 1 :(得分:0)

尝试这样的事情。

git merge <msg> HEAD <commit_sha>

例如

git merge test HEAD 9eef2c89753895da807c936ff1ba3a255c8370c9

答案 2 :(得分:0)

您可以存储工作副本更改,检出<commit>中的所有文件(但不更新HEAD),然后弹出存储:

git stash
git checkout `<commit>` .    # in working copy root directory
git stash pop

这将通过在<commit>

的内容上应用它们来保留您的工作副本和索引修改

如果发生冲突,您必须在解决后隐藏(git stash drop)。