撤销 git checkout --orphan 命令

4

我“错误地”将我的git仓库检出为孤立分支。有没有办法撤销这个命令?我还没有进行任何提交甚至改变了仓库的其他方式。


请像平常一样将代码检出到正常的分支。 - Thorin
根据下面的答案,要在本地删除分支:git branch -D <anExistingBranch>。 - imranal
3个回答

4
自从分支创建以来(没有任何父提交),我将其重置为它应该从当前分支开始的分支:
# check that your current branch is the orphan one
git branch

git reset <anExistingBranch>
# or
git checkout -B <anExistingBranch>

从那里进行的提交将在新分支中完成,其中<anExistingBranch>的HEAD作为父级。
这将“解除孤立”您的孤立分支。

(我认为这是关于一个新分支的,因为对现有分支的git checkout --orphan不起作用“fatal: A branch named 'xxx' already exists”)


并没有真正回答问题。问题是如何撤销命令,这个我已经回答了,而且评论也只是一个简单的检查。;-) - Vampire
在现有分支上调用git checkout --orphan是行不通的,会出现"fatal: A branch named 'xxx' already exists"的错误。这就是为什么我认为我们正在谈论一个新分支的原因:一旦创建了分支,简单的checkout不会改变任何东西。需要进行重置(或git checkout -B)以移动HEAD。 - VonC
不行,如果你执行 git checkout --orphan foo && git checkout master,你会发现你的状态和之前完全一样。孤立分支的检出并没有真正创建分支,因为还没有提交可以指向该分支。这与执行 git init && git checkout -b foo && git add . && git commit -m foo 相似,它只会留下一个名为 foo 的分支,而没有 master 分支,因为只有第一次提交才能真正创建分支。 - Vampire
这是问题,如果我可以引用的话:“有没有办法撤销这个命令?” :-) - Vampire
1
@Vampire 再次同意。我想提到一种替代简单还原的方法,它允许从正确的起点开始在新分支上工作。 - VonC

2

只需使用常规的checkout检查您想要的分支即可。


它不允许我说我的未跟踪文件将被覆盖,git checkout -f master(强制)可以工作。 - BrunoLM
是的,如果您有未跟踪的文件将被覆盖,那是正常行为。而且,如果您在普通分支之间切换,也是如此。这与此问题的情况无关。 - Vampire

-1

git reflog -3 && echo 查看之前的提交记录

git checkout head@{1} && echo 切换到之前的提交版本


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接