2017-03-07 107 views
1

以前可能有人问过这个问题,但我对这个术语有点困惑,所以我不确定哪些命令是正确的,以完成我需要完成的任务。现在我有一个GitHub存储库,我正在与我的团队合作。在那里,我为一项任务做了一个分支。我将存储库克隆到本地计算机,然后在本地签出该分支。我开始进行需要继续努力的更改......在进行这些更改时,我的团队一直在更新他们的代码并将更改推回GitHub上的主分支。我如何从GitHub上的主分支下拉他们的更改,以便它在本地更新我的分支,并在GitHub上更新(现在在GitHub上,它表示我提前1次提交,并且19次提交到主后面)。感谢您在这里的建议......这将是我的东西打算经常这样做学习正确的流程将有助我...远程主机的Git Rebase

回答

1

你可以在这里应用一系列的方法来实现你想要的。这可能取决于您的存储库策略。例如,如果您重新绑定分支,您将无法将其推回到服务器,则必须使用-f或者删除远程分支并推送一个新分支。有些人可能会说,一旦你已经推动你分支到服务器,rebase就不是一个好方法,如果这是你的repo的策略,那么你必须把master合并到你的分支,然后把它推回到远程。

让我们对既要讲方法:

再次基于:

我个人很喜欢这样做更重订,但只有我敢肯定,没有其他人正在使用的我推到在树枝上遥控器。我喜欢rebase,因为这最终会留下更清晰的历史记录,因为它会从分支中删除我的更改,应用远程更改,然后将更改应用到顶层,但这样做会更改提交哈希,并且它会执行不匹配以前用于同一提交的那个,因此,您必须使用-f或者删除远程分支并将其重新创建。

我会做这样的,在你的本地仓库,我会去到主分支:

git checkout master

然后更新它与远程变化:

git pull

它将在你的git master分支的后台运行一个git fetch并进行合并。

然后回到你的分支:

git checkout my_branch

,然后与主底垫吧:

git rebase master

如果一切没有发生冲突运行你是好去。

,你可以使用:

git push -f origin my_branch

(!要小心这个命令将覆盖远程分支,这是非常危险的,确保一切都在你的底垫细使用此命令之前)

或者你可以删除你的远程分支端推回正常的服务器:

git push origin my_branch

合并:

使用这种方法,你会合并最终提交您的历史记录和日志可以随着时间的推移会比较混乱,但也有一些这方面的优势,以及,如果你有一个冲突,你只需要解决它一次,当你合并时,如果你在重新绑定时有冲突,你可能需要多次解决它,因为它会尝试将你的提交应用于新的远程提交一个。

要做到这一点,你可以去到你的主分支和更新:

git checkout master

和:

git pull

会做同样的,因为我们前面看到的

现在回到你的分支:

git checkout my_branch

并运行:

git merge master

,如果你没有,你是好去任何冲突,你可以把它推到服务器,如果你,你只需要解决它并且您可以将其正常推送到服务器,因为现在您解决了新提交时的冲突,您的本地分支和远程分支之间没有任何分歧。

git push origin my_branch

就是这样,我希望对您有所帮助,你也许可以做到这一点以更少的步骤,但这些都只是我喜欢做,他们可能不是短的步骤,但我觉得这种方式更安全。当然,还有很多合并和重组的选项,我会建议您仔细研究一下它们是非常有用的。

+0

这是抱怨我的pom.xml。有没有一种简单的方法可以在该文件的本地忽略我的更改,从rebase中取出更新后的文件,然后在该文件的本地重新进行这些更改?他们只是小小的变化,所以我觉得这会更容易。 –

+0

我能够避免pom.xml我纠正冲突,然后做一个添加它和一个提交。但现在我的分支在本地表示“你的分支和'origin/'已经分开, 分别有22个和1个不同的提交 (使用”git pull“将远程分支并入你的) 没有提交,工作树干净“任何想法? –

+0

不知道我是否理解,你是否承诺你的改变,然后你尝试了rebase?在这之前你没有任何承诺吗?因为正如我所说的:“......如果您重新分配分支,您将无法将其推回到服务器,则必须使用-f或使用-f或删除远程分支来推送新分支” – Marcone

0

这将是帮助:

$ git config --global branch.master.rebase true 

# cat ~/.gitconfig 
[user] 
     name = xx 
     email = [email protected] 
[branch "master"] 
     rebase = true 

谢谢。

+0

一次OK我再补充一点的配置,会是什么命令完成我所需要的?那我可以做一个git rebase吗? –

+0

只是混帐拉。远程提交将合并到本地。 –

+2

您必须在答案中添加更多信息。只是一系列的命令对未来的目的没有用处。 – Smit

0

如何拉下自己的变化,从GitHub上这样 主分支,它更新我的分支机构本地

git checkout master 
git pull 
git checkout <your-branch> 
git rebase master 

和GitHub上,以及(现在GitHub上,它说我1提交 提前和19落后主人)。

git commit -m "I do this, do that" 

上传分行远程

git push -u <remote-name> <your-branch-on-remote> 

合并掌握并上传您的更新上主远程

git checkout master 
git merge --no-ff <your branch> 
git push -u <remote-name> master