将Git分支合并到master中的最佳(也是最安全)方法是什么?
创建了一个来自
master
的新分支,我们将其称为test
。
有几个开发人员要么承诺master
,要么创建其他分支,然后合并到master
。
让我们说test
的工作需要几天时间,你想继续保持test
更新内部comm0ѭ的提交。
我会从test
做git pull origin master
。
问题1:这是正确的方法吗?其他开发人员可以轻松地处理相同的文件,就像我工作顺便说一句。
我对test
的工作已经完成,我准备把它合并回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:这两种方法中哪一项是正确的?那有什么区别?
所有这一切的目标是让我的test
分支更新master
中发生的事情,之后我可以将它们合并回master
,希望尽可能保持时间线的线性。
没有找到相关结果
已邀请:
8 个回复
漂汀拦
如果我有一个远程本地分支,我觉得将其他分支与远程分支合并后感觉不舒服。此外,我不会推动我的更改,直到我对我想要推送的内容感到满意,而且我根本不会推送任何内容,这些内容仅适用于我和我的本地存储库。在您的描述中,似乎
仅适合您?所以没有理由发表它。 git总是试图尊重你和其他人的变化,所以
。我不认为我能够恰当地解释它,所以看看Git书 - 重新定位或git-ready:介绍变基础以获得一些描述。这是一个非常酷的功能
抢垢洛韧
这种方法有两个问题: 这是不安全的,因为我们不知道测试分支和主分支之间是否存在任何冲突。 它会将所有测试提交“挤压”到master上的一个合并提交中;也就是说在master分支上,我们看不到测试分支的所有更改日志。 所以,当我们怀疑会有一些冲突时,我们可以进行以下git操作:
在
之前测试
,避免
的快进提交, 如果遇到冲突,我们可以运行
查看有关冲突的详细信息并尝试解决
一旦我们解决了冲突,或者没有冲突,我们就会
和
但是这种方式将丢失测试分支中记录的更改历史记录,这将使主分支很难让其他开发人员了解项目的历史记录。 所以最好的方法是我们必须使用
而不是
(假设,在这个时候,我们已经解决了分支冲突)。 以下是一个简单的示例,对于高级操作,请参阅http://git-scm.com/book/en/v2/Git-Branching-Rebasing
是的,当你完成鞋面时,所有Test分支的提交都将转移到Master分支的头部。变基的主要好处是,您可以获得线性且更清晰的项目历史记录。 你唯一需要避免的是:永远不要在公共分支上使用
,比如master branch。 切勿执行以下操作:
https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing的详细信息 附录: 如果您不确定变基操作,请参阅:https://git-scm.com/book/en/v2/Git-Branching-Rebasing
玩翁文醚碱
当你准备合并回主人,
如果你担心合并上有什么东西,
就在那里。 使用push然后pull作为合并的手段是愚蠢的。我也不确定你为什么要把测试推向原点。
信藉乒
您可能在另一个分支中进行了许多提交,这应该只是主分支中的一个提交。为了使提交历史尽可能干净,您可能希望将所有提交从测试分支压缩到主分支中的一个提交(另请参阅:Git:压缩或不压缩?)。然后,您还可以将提交消息重写为非常富有表现力的内容。一些易于阅读和理解的东西,无需深入研究代码。 编辑:你可能会感兴趣 在git中,merge --squash和rebase之间有什么区别? 合并与重新定位 如何重新启动拉取请求 所以在GitHub上,我最终为功能分支
做了以下事情: 从原点获取最新信息
找到合并基础哈希:
现在确保只有第一个是
,其余的是
:
接下来选择一个非常好的提交消息并推送到GitHub。然后发出拉取请求。 合并拉取请求后,您可以在本地删除它:
并在GitHub上
芭隘的盘石
的工作时,我会与主人一起工作,以便在我在
分支工作期间拉入已添加到主人的任何东西。
这将把更改拉到master,因为你分叉了
分支并应用它们,然后应用你所做的更改来“测试”当前master的状态。如果其他人对您在测试中编辑的相同文件进行了更改,则此处可能存在冲突。如果有,您将必须手动修复它们并提交。一旦你完成了这个,你就可以切换到主分支并合并
而没有任何问题。
峨躬坎抬焚
在Master上合并分支:
如果在Rebase期间遇到冲突: 首先,解决文件中的冲突。然后:
一旦rebase完成,rebase分支在master之上:
坝镰补翔奋
合并后,如果文件被更改,那么当您合并时将通过“Resolve Conflict”错误 那么你需要首先解决所有的冲突然后,你必须再次提交所有的更改然后推送
在测试分支中做了更改的人更好,因为他知道他做了什么改变。
诞胃
,我会:
当然,仅从原点获取不会刷新
的本地状态(因为它不执行合并),但它完全可以达到我们的目的 - 我们希望避免切换,以节省时间。