从主分支检出后删除分支

4

我将从主分支检出一个名为FNB-90的分支。在FNB-90分支中,我进行了2次添加、提交并将它们推送到远程仓库。然后,我又从FNB-90检出另一个名为FNB-90-CHILD的分支。

a. 如果现在在FNB-90分支中,我执行以下命令:

$ git fetch  # will fetch the latest changes on the remote
$ git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.

如果我检出的 FNB-90 分支不符合预期,能否恢复为原始状态?如果不能,那么该怎么做呢?

b. 如果我用命令删除了分支 FNB-90

$ git branch -d FNB-90
$ git push origin --delete FNB-90

分支 FNB-90-CHILD 会发生什么,它将成为 master 的直接分支吗?


2
Git中的分支是“特定DAG中指向“头”节点的指针”。到目前为止,两个不同的分支名称没有关联 - 删除对提交(请参见上文)的名称不会影响该提交或其他提交的任何其他名称。 - user2864740
什么是DAG?如果时间允许,您能否写一个简短的答案?特别是,我需要知道如何在添加、提交和推送后将FNB-90还原到原始状态。 - Arefe
DAG代表有向无环图 - 基本上,没有提交可以成为其自身的祖先(或后代)。 - user2864740
将 FNB-90 恢复到原始状态,强制将其(branch -f)转到应在其中的适当提交位置;更改远程分支可能会影响其他人,但是 reflog 通常很方便,可以查看意外移动的地方。 - user2864740
2个回答

1

FNB-90会恢复到我检出的原始状态吗?

是的,前提是主分支没有本地提交与origin/master不同。
为确保还原,请在reflog中查找checkout FNB-90事件,如此处所示

请注意,如果您之前已经推送了FNB-90,则必须执行git push --force以传播该重置:确保您的同事知道这一点(他们将不得不重置自己的FNB-90分支)。


1

答案:a

FNB-90会回到我检出的原始状态吗?

是的,现在origin/master和本地FNB-90具有相同的提交历史记录。如果您想更新origin/FNB-90,则必须进行force push

注意:强制推送将使用本地FNB-90的历史记录替换origin/FNB-90的历史记录。

$ git fetch
$ git checkout FNB-90
$ git reset --hard origin/master

$ git push -f origin FNB-90 

现在,origin/master = origin/FNB-90 = local FNB-90 处于相同的状态。
此外,FNB-90-CHILD 对此没有影响。(历史记录与之前相同)。

答案:b

如果您从本地和远程删除分支FNB-90,它对FNB-90-CHILD没有影响。一个分支(HEAD)只是指向一个提交的指针。如果我们删除一个分支,它会删除分支的指针,但提交仍然存在。


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