从master创建一个新分支,我们称之为test。

有几个开发人员要么提交到master,要么创建其他分支,然后合并到master。

假设测试工作需要几天的时间,您希望通过master内部的提交不断更新测试。

我会从测试中提取原始主机。

问题1:这是正确的方法吗?其他开发人员可以像我一样轻松地处理相同的文件。


我的测试工作已经完成,我已经准备好将其合并回master。以下是我可以想到的两种方法:

A:

git checkout test
git pull origin master
git push origin test
git checkout master
git pull origin test 

B:

git checkout test
git pull origin master
git checkout master
git merge test

我没有使用--rebase,因为根据我的理解,rebase将从master获取更改,并将我的更改叠加在上面,因此它可能会覆盖其他人所做的更改。

问题2:这两种方法中哪一种是正确的?有什么不同?

所有这一切的目标是让我的测试分支随着master中发生的事情而更新,然后我可以将它们合并到master中,希望尽可能保持时间线的线性。


当前回答

我该怎么做

git checkout master
git pull origin master
git merge test
git push origin master

如果我有一个来自远程分支的本地分支,那么我不愿意将除此分支之外的其他分支与远程分支合并。此外,我不会推送我的更改,除非我对我想要推送的内容感到满意,而且我也不会推送任何内容,这些内容只针对我和我的本地存储库。在你的描述中,这个测试似乎只针对你?所以没有理由发表它。

git总是努力尊重你和其他人的改变,所以会——重新基准。我觉得我不能恰当地解释它,所以看看Git的书《Rebasing or Git ready》:介绍一下Rebasing。这是一个很酷的功能

其他回答

我会使用rebase方法。主要是因为它在语义上完美地反映了您的情况,即您要做的是刷新当前分支的状态,并“假装”它是基于最新的。

所以,我甚至不需要检查master,我会:

git fetch origin
git rebase -i origin/master
# ...solve possible conflicts here

当然,仅从原点获取不会刷新主机的本地状态(因为它不会执行合并),但这完全符合我们的目的-为了节省时间,我们希望避免切换。

重新基准和合并都不应覆盖任何人的更改(除非您在解决冲突时选择这样做)。

开发时的通常方法是

git checkout master
git pull
git checkout test
git log master.. # if you're curious
git merge origin/test # to update your local test from the fetch in the pull earlier

当你准备好合并回master时,

git checkout master
git log ..test # if you're curious
git merge test
git push

如果您担心在合并过程中出现问题,gitmerge--abort就在您身边。

使用推拉合并是愚蠢的。我也不确定你为什么要把测试推向原点。

这里已经有很多好答案了。我只是在添加我所做的步骤。

git fetch -p
git checkout master
git rebase origin/master
git checkout test
git rebase master

解释

gitfetch-p将检索自上次获取以来所做的任何更改,-p将修剪您的分支,删除所有过时的分支。

git checkout master签出master分支

gitrebaseorigin/master更新master分支。在这里做一次拉动会得到同样的结果。

gitcheckout测试签出您所做更改的分支

gitrebasemaster使用master上的更改更新测试分支。这将合并所有更改的文件,如果在任何提交上存在冲突,则必须解决它们,然后执行git rebase--continue或git rebase--abort

您必须签出分支才能进行拉取,因为拉取意味着合并到主分支中,您需要一个工作树来合并。

git checkout master
git pull

无需先退房;rebase用两个参数做了正确的事情

git rebase master test  

git checkout master
git merge test

默认情况下,git push推送存在于此处和远程上的所有分支

git push
git checkout test

我将按照开发和功能分支回答,

如果您在功能分支上,需要使用develop进行更新,请使用以下命令:

git checkout develop
git pull
git checkout feature/xyz
git merge develop

现在,您的feature/xyz已通过开发分支更新,您可以将更改推送到远程feature/xz。