git:合并合并请求后如何获得新的develop分支?

时间:2018-07-31 20:54:35

标签: git branch

我做了一个仓库的git克隆,然后开发了git checkout 然后,我创建了一个功能分支,进行了一些更改,将其提交并推回到github。然后,在github中,我随后发出了一个拉取请求以将其拉出进行开发,并合并以进行开发。如果我转到github网站,然后选择development分支,那么我会在源代码中看到我的更改。

但是我找不到将新的develop分支恢复到我的mac上的方法。

如果我执行git fetch,则不会出错。然后我进行git checkout开发,但是我只看到我的旧代码。显然,我没有对机器上的任何开发进行更改,它们仅通过pull request / merge发生在github内部。

如何获得新的开发分支?

我猜到了“ git merge development”,尽管这似乎是错误的,没有任何内容可以合并,我只想从获取的更新中签出开发。 “ git mergedevelop”只是说“已经更新”,尽管事实并非如此。

我也尝试过进行git pull。这会给出错误消息,并建议:

git分支--set-upstream-to = origin /开发

这似乎太过激烈了,我不知道这样做会有什么副作用。

很显然,我可以删除整个项目,并从头开始克隆,但是我想有一种更简单的方法吗?

仅供参考,在服务器上,我尝试进行git clone,然后进行git checkout开发,然后看到了新代码。

另外,在我的Mac上,如果我执行“ git status”,则显示:

在分支机构发展中, 没什么要提交的,正在工作的树干净

还请注意,我不是用叉子工作,而是直接在主要(也是唯一的)github存储库上做分支。

2 个答案:

答案 0 :(得分:1)

您应该这样做:

git checkout develop
git pull

那会获取并合并。

在当前情况下,您仍然可以执行以下操作:

git checkout develop
git fetch
git merge origin/develop

答案 1 :(得分:0)

您可以删除自己的develop,然后再次git checkout develop,或者(至少有时/通常)执行以下操作:

$ git fetch              # if needed
$ git checkout develop
$ git merge

但是,实际上,您甚至不需要自己的develop

一旦您了解了Git中的分支 names 仅仅是指针,一切就变得清晰了。在Git中,真正重要的是 commits 。每个名称(无论是developmaster之类的分支名称,还是origin/develop之类的远程跟踪名称)都仅指向一个提交。提交代表实质;名称就是Git 查找提交的方式。

让我们看一下开始时所拥有的内容,但让我们从绘制提交开始。每个提交的真实名称都有一个丑陋的哈希ID,但这对于普通人来说太笨拙了,因此让我们使用单个大写字母来表示提交。我们还要注意,每个提交都记录其 parent 提交的哈希ID。当某个东西拥有提交的哈希ID时,我们说这个东西指向。因此,如果首先提交A,然后记住B的哈希ID,则A指向B

A

,依此类推。因为新的提交链接到旧的提交(而不是旧的链接到新的),并且一旦提交后就无法在提交内进行更改,因此这些箭头始终指向后方,因此我们可以绘制它们为方便起见。

由于哈希ID似乎是随机的,因此Git和您都需要某种名称来保存 last 提交的哈希ID:

A <--B <--C

多个名称可以拥有相同的哈希ID,就像现在运行A--B--C <-- origin/develop 那样,它会发现您没有 git checkout develop,但是您确实有一个develop,所以它现在{em>创建您的origin/develop

develop

(Git在一个分支上附加了A--B--C <-- develop (HEAD), origin/develop 一词,以记住哪个分支是当前活动的分支。将其包括在图形中是个好主意。)

如果您现在创建功能分支HEAD,则Git也会指向提交feature

C

当您提交 new 提交时,Git会创建指向当前提交的新提交-提交A--B--C <-- develop, feature (HEAD), origin/develop ,通过C找到该提交,然后更新当前名称,通过HEAD找到,因此它指向指向HEAD new 提交:

C

您现在A--B--C <-- develop, origin/develop \ D <-- feature (HEAD) 到GitHub,它在另一个Git上创建了一个名为git push feature的分支,您的Git调用了feature,所以现在 you 具有: / p>

origin

请注意,您的Git只是通过这些A--B--C <-- develop, origin/develop \ D <-- feature (HEAD), origin/feature 名称来记住他们的 Git的分支在哪里。

现在有人将您的提交合并到原始位置的origin/中。结果是-嗯,可能是 ,具体取决于该“某人”在GitHub上的操作方式-绘制如下:

develop

如果您现在A--B--C <-- develop \ D <-- feature (HEAD), origin/develop, origin/feature git checkout develop附加到HEAD,您将得到:

develop

如果您现在要求Git将A--B--C <-- develop (HEAD) \ D <-- feature, origin/develop, origin/feature develop合并,您的Git会注意到,它可以作为一种快进操作(实际上不是合并)来执行此操作,它会产生: / p>

origin/develop

但是请注意,如果您只是删除名称A--B--C \ D <-- develop (HEAD), feature, origin/develop, origin/feature ,而没有附加develop,则会得到:

HEAD

从某种意义上讲也是一样。如果现在要创建A--B--C \ D <-- feature (HEAD), origin/develop, origin/feature ,则可以立即创建该分支名称,然后删除feature2feature,并输入:

git push --delete origin feature

请注意 commits 如何始终保持违规状态。提交是Git存在的原因。分支和远程跟踪名称始终为 change 。分支名称尤其因您进行新提交而改变。当您成功A--B--C \ D <-- feature2 (HEAD), origin/develop 时,您的远程跟踪名称就会更改—您的Git知道其Git已将新的提交接受到其分支名称中—以及当您git push时,因为您的Git刚获取了所有最新提交,并且知道他们的分支名称现在在哪里。这些是移动的部分。提交不会动:它们只是随着时间的推移而积累。