从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中,希望尽可能保持时间线的线性。


当前回答

这是我在团队工作中使用的工作流。场景如您所述。首先,当我完成测试工作时,我与master重新建立了基础,以便在我进行测试分支的过程中提取添加到master的任何内容。

git pull-r上游主机

这将从您分叉测试分支开始将更改拉到master并应用它们,然后将您所做的更改应用到“在”当前master状态的顶部进行测试。如果其他人对您在测试中编辑的相同文件进行了更改,则此处可能存在冲突。如果存在,则必须手动修复并提交。完成后,切换到主分支并合并测试将很好,不会出现任何问题。

其他回答

这是我在团队工作中使用的工作流。场景如您所述。首先,当我完成测试工作时,我与master重新建立了基础,以便在我进行测试分支的过程中提取添加到master的任何内容。

git pull-r上游主机

这将从您分叉测试分支开始将更改拉到master并应用它们,然后将您所做的更改应用到“在”当前master状态的顶部进行测试。如果其他人对您在测试中编辑的相同文件进行了更改,则此处可能存在冲突。如果存在,则必须手动修复并提交。完成后,切换到主分支并合并测试将很好,不会出现任何问题。

正如标题所说的“最佳方式”,我认为考虑耐心合并策略。

发件人:https://git-scm.com/docs/merge-strategies

使用此选项,“merge recursive”会花费一点额外的时间来避免由于不重要的匹配行(例如,不同函数的大括号)而有时发生的错误合并。当要合并的分支出现严重分歧时,请使用此选项。另请参见gitdiff[1]——耐心。

用法:

git fetch
git merge -s recursive -X patience origin/master

Git别名

我总是为此使用别名,例如运行一次:

 git config --global alias.pmerge 'merge -s recursive -X patience'

现在你可以做到:

git fetch
git pmerge origin/master

@在很多情况下,金克鲁奇的答案应该是有效的。可能会出现的一个问题是,您可能在另一台机器上,需要从测试中获取最新信息。所以,我建议先进行拉力测试。修订如下:

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

我总是在执行git合并功能分支时遇到合并冲突。这似乎对我有用:

git checkout -b feature-branch

进行一系列代码更改。。。

git merge -s ours master 

git checkout master

git merge feature-branch

or

git checkout -b feature-branch

进行一系列代码更改。。。

git checkout master

git merge -X theirs feature-branch

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

开发时的通常方法是

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就在您身边。

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