如何使用远程主服务器重新建立本地分支


929

我有一个从远程存储库的master分支克隆的项目remote_repo。我创建一个新分支,然后提交该分支。其他程序员被推送到remote_repomaster分支。

现在,我需要将分支RB重新设置为remote_repomaster。

这个怎么做?键入什么命令到终端?


14
对我来说,这个问题是模棱两可的,因为“ with”可能意味着要向任一方向撤军。查看答案,我发现目的是将分支重新建立远程主服务器上,而不是相反。我提到它是为了防止有人遵循以下答案并得到他们想要的反面。
Glenn Lawrence

8
@GlennLawrence我认为编辑原始问题比添加评论要好。stackoverflow也鼓励这样做。此外,将主控重新部署到RB可能仍然会失败,因为RB取决于主控的历史。
丹尼尔·库尔曼

Answers:


1241

首先从上游存储库中获取新的母版,然后在此基础上重新构建您的工作分支:

git fetch origin            # Updates origin/master
git rebase origin/master    # Rebases current branch onto origin/master

更新:请参阅Paul Draper的答案,以获得更简洁的方法来进行操作-最新的Git版本提供了一种更简单的方法来完成上述两个命令。


16
这是实际执行询问的唯一答案
kayaker243

5
@ kayaker243不,它与Paul Drapers的回答相同,但我认为它的形式很长。
erik

7
@erik请注意,保罗·德雷珀(Paul Draper)在kayaker243发表评论后大约半年(以及此回答将近两年)之后写下了答案。
Frerich Raabe 2013年

3
我得到以下信息:Your branch and 'origin/b1' have diverged, # and have 3 and 2 different commits each, respectively.似乎git pull需要另一个。这是正确的还是我在这里遗漏了一些东西?
Dror

2
@RGC否,git rebase master不会执行与第二个命令(git rebase origin/master)相同的工作,因为master它很origin/master可能指向不同的提交(尤其是考虑到第一个命令是git fetch origin,它可能会进行修改origin/master)。
Frerich Raabe 2014年

809
git pull --rebase origin master
# where --rebase[=(false|true|merges|preserve|interactive)]

19
(相当于弗雷里希的回答)
保罗·德雷珀

12
这与Frerich的回答是否略有不同,因为这会将更改从原点提交到本地主机,而Frerich的回答则保持本地主机不变?(拉动与获取)
Jimmy Huch 2015年

7
不,按照弗雷里希的回答,rebase修改了本地主机。pull --rebase和fetch之后再进行rebase是一样的事情
adhominem 16-4-14

9
仅供参考,您可以使用git pull --rebase=interactive origin master
emmby

14
@adhominem-我检查了git-pull文档,但看不到任何支持修改本地master的说法。如果我在名为dev并且运行的分支上git pull --rebase origin master,则仅分支dev将被修改,而不是master。该--rebase标志文档指出它试图rebase the current branch on top of the upstream branch after fetching和有关修改本地跟踪分行一无所获。
恢复莫妮卡2331977年

223

将更改提交到分支后,检出master并拉出它以从存储库中获取最新更改:

git checkout master
git pull origin master

然后签出您的分支并基于master以下内容进行更改:

git checkout RB
git rebase master

...或一行中的最后两个命令:

git rebase master RB

尝试推回时origin/RB,您可能会收到错误消息;如果您是唯一从事此工作的人RB,则可以强制执行:

git push --force origin RB

...或如下所示(如果您已正确配置git):

git push -f

4
当尝试将其推回原点/ RB时,可能会收到错误消息。如果您是唯一在RB上工作的人,则可以git push --force origin RB。来源:stackoverflow.com/questions/8939977/…–
乔伊·巴鲁克

1
啊....我就是这个。我的“ RB”已正确地重新设置了基准,但是在重新设置基准后将其推入时却出现无尽的错误。除了push --force起源RB外,还有“更精细”的方法(非强制)吗?我只是试图在这里理解gits的看法-并失败了。
Motti Shneor

2
@MottiShneor不,没有很好的方法。如果其他人同时推送到分支机构,他们的更改将丢失!如果您想对git commit历史记录感到满意,则应该将master合并到分支中,这是安全的(您可以不git push使用-f)。
丹尼尔·库尔曼

109

注意:如果您已经具备有关变基的广泛知识,那么请使用一根以下的衬纸进行快速变基。 解决方案: 假设您在工作分支上,并且您是唯一在该分支上工作的人。

git fetch && git rebase origin/master

解决任何冲突,测试您的代码,提交并将新更改推送到远程分支。

                            ~:   For noobs   :~

以下步骤可能会帮助任何新手git rebase并想要轻松解决的人

步骤1:假设此时您尚未在YourBranch上进行任何提交和更改。我们正在访问YourBranch。

git checkout YourBranch
git pull --rebase

发生了什么?提取分支上其他开发人员所做的所有更改,并在此基础上重新进行更改。

步骤2:解决出现的任何冲突。

第三步:

git checkout master
git pull --rebase

发生了什么?从远程主机上提取所有最新更改,并在远程主机上重新建立本地主机的基础。我总是保持远程主机干净并准备发布!并且,只希望在本地的master或分支上工作。我建议您这样做,直到您对git进行更改或提交为止。注意:如果您不维护本地主服务器,则无需执行此步骤,而是可以直接在本地分支上进行获取和重新设置远程主服务器的基准。正如我在一开始提到的那样。

步骤4:解决出现的任何冲突。

步骤5:

git checkout YourBranch
git rebase master

发生了什么?依靠大师发生

步骤6:解决任何冲突(如果存在冲突)。使用git rebase --continue添加解决冲突后继续重订。您可以随时用于git rebase --abort中止重新设置基准。

步骤7:

git push --force-with-lease 

发生了什么?将更改推送到您的远程YourBranch。--force-with-lease将确保您在重新定基时其他分支为YourBranch传入其他更改。这是超级有用的方法,而不是强行推动。如果有任何传入的更改,则在推送更改之前先获取它们以更新您的本地YourBranch。

为什么我需要推动变更?要在正确的基准调整后在远程YourBranch中重写提交消息,或者是否解决了任何冲突?然后,您需要将在本地存储库中解决的更改推送到YourBranch的远程存储库中

Yahoooo ...!您已经成功完成了基础调整。

您可能还会考虑这样做:

git checkout master
git merge YourBranch

什么时候以及为什么?如果您和其他共同开发人员进行了更改,则将分支合并到master。当您以后想要在同一分支上工作时,这可使YourBranch与master保持最新。

                            ~:   (๑ơ ₃ ơ)♥ rebase   :~

这是什么意思:“将所有最新更改从主服务器中拉出,并将主服务器重新建立在最新主服务器上。”。靠主人掌握主人?您只需要拉最新的大师吗?
约翰·利特尔

@JohnLittle感谢您指出。我是说Pulls latest changes from remote master to local master. I always prefer keeping remote master clean and release ready always!。我将更新我的描述。
bh4r4th

21

步骤1:

git fetch origin

第2步:

git rebase origin/master

第3步:(解决任何冲突)

git add .

第四步:

git rebase --continue

步骤5:

git push --force

5
没有关于哪个分支开始的解释。不好回答。
卡尔·莫里森

12

1.先更新Master ...

git checkout [master branch]
git pull [master branch]

2.现在使用master分支对源分支进行重新设置

git checkout [source branch]
git rebase [master branch]
git pull [source branch] (remote/source branch)
git push [source branch]

如果远程上尚不存在源分支,请执行以下操作:

git push -u origin [source branch]

“等等!”


我喜欢此答案的逐步特性。它有助于分解正在发生的事情。
戴夫·刘

6

git fetch origin master:master 拉取最新版本的master,而无需检出。

因此,您需要做的是:

git fetch origin master:master && git rebase master 👌


是否也不git fetch需要检出母版就更新母版?除了git fetchgit merge更新吗?因此,如果我们结帐master,它将没有最新更新。所以,是不是很短,而在功能分支做,git fetch然后git rebase origin/master?我们不能这样做,git rebase master因为这将尝试从master工作空间中重新建立基础,我们需要origin/master从未合并但位于本地的位置获取信息。
Noitidart
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.