Git - 新的本地分支当前在本地主服务器上提交?

  • 本文关键字:服务器 提交 分支 Git git
  • 更新时间 :
  • 英文 :


我不小心对我的本地主节点做出了承诺,正在等待它通过代码审查过程。我不想失去这种变化。但是,我想在此期间做其他事情。当我尝试签出新分支时,我在我的主分支上的最新提交也会随之而来。

如何获得反映源主节点状态的新本地分支,而无需最近在本地主服务器上提交?

当你创建一个分支时——无论你如何创建它——你从仓库中挑选一些现有的提交,以便识别该分支名称,所以你所要做的就是选择正确的提交。

将提交视为充满东西(数据和元数据(的实心节点,由箭头连接。 画好箭头有点困难,但我们可以像这样做:

... <-F <-G <-H

其中每个大写字母代表某个实际提交的实际哈希 ID。 (例如,您会git log输出中看到这些丑陋的大哈希 ID。 箭头是提交元数据的一部分:每个提交都存储其父级的原始哈希 ID。 因此,箭头都指向方。

如果你有一些分支正在进行,它看起来更像这样:

H
/
...--F--G

I

请注意,最末端的提交有一个箭头,但没有箭头让你找到它们。但是,提交哈希 ID 看起来是随机的,因此我们需要箭头来查找它们。 这就是分支名称!

H   <-- master
/
...--F--G

I   <-- develop

要从这里到达那里:

...--F--G--H   <-- master

您只需要在更高的行上绘制master(仅用于绘制目的(,然后创建一个指向现有提交G的名称develop

H   <-- master
/
...--F--G   <-- develop

您现在可以git checkout develop、执行操作并进行新的提交。 进行新提交使其指向当前提交,然后更新当前分支名称以指向提交。 所以:

<make branch name "develop" identifying commit G>
git checkout develop
... develop and commit ...

你有:

H   <-- master
/
...--F--G

I   <-- develop (HEAD)

(HEAD)仅在此处显示哪个是当前分支。

困难的部分是找到G的哈希 ID ,但这并不难:git log告诉你。 然后你可以做:

git branch develop <hash>

或者,您可以使用特殊语法:master~1表示查找名称master指向的提交,然后后退一个父级。所以:

git branch develop master~1

做正确的事:找到H,倒数1到G,并创建名称develop

最后,您可以将创建新分支名称和签出名称操作合并为一个:

git checkout -b develop master~1

这很方便。

您可以使用上游主分支重置主分支

git checkout master
git reset --hard origin/master

请注意,使用 reset --hard 将导致未提交的更改丢失,如果要保留未提交的更改,请执行软重置

最新更新