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

时间:2019-11-27 00:13:55

标签: git

我意外地对本地主机进行了提交,正在等待其通过代码审查过程。我不想失去这种改变。但是,与此同时,我想从事其他工作。当我尝试签出新分支时,我在主分支上的最新提交也随之转移。

如何获得一个新的本地分支,该分支反映原始主服务器的状态,而无需最近对本地主服务器进行提交?

2 个答案:

答案 0 :(得分:0)

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

git checkout master
git reset --hard origin/master

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

答案 1 :(得分:0)

创建分支时(无论如何创建),都会从存储库中选择一些现有提交以标识该分支名称,因此您要做的就是选择正确的提交。 / p>

将提交视为由箭头连接的,充满了所有内容(数据和元数据)的实体节点。很难很好地绘制箭头,但是我们可以像这样:

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

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

如果您正在进行某些分支,则它看起来像这样:

          H
         /
...--F--G
         \
          I

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

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

从这里到达那里:

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

您只需要在较高的线条上绘制master(仅出于绘制目的),然后命名一个指向现有提交develop的名称G

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

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

<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

这很方便。