git合并分支 - git删除远程分支



将git分支合并到master中最好(也是最安全)的方法 (4)

我将如何做到这一点

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

如果我有一个远程分支机构的本地分支机构,那么我觉得合并其他分支机构比将此分支机构与远程分支机构合并是不合适的。 此外,我不会推动我的更改,直到我对我想要推动的内容感到满意为止,并且我也不会推动所有事情,只有我和我的本地存储库。 在你的描述中,似乎那个test只针对你? 所以没有理由发布它。

git总是试图尊重你和其他人的变化,而且--rebase也是如此。 我不认为我可以适当地解释它,所以看看Git书 - 重新激活或者git-ready:介绍重新 分配一些描述。 这是一个很酷的功能

https://src-bin.com

创建一个来自master的新分支,我们称之为test

有几个开发人员承诺master或创建其他分支机构,然后合并到master

假设test工作需要花费数天时间,并且您希望通过提交内部提交来持续更新test

我会做test git pull origin master

问题1:这是正确的方法吗? 其他开发人员可以很容易地处理相同的文件,因为我曾在btw工作过。

我的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和stack上取得变化,因此它可以覆盖其他人做出的更改。

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

所有这一切的目标是让我的test分支更新为master发生的事情,之后我可以将它们合并回master希望尽可能保持时间线性。


Answer #1

这是一个非常实际的问题,但上面的所有答案都不实际。

喜欢

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

这种方法有两个问题

  1. 这是不安全的,因为我们不知道测试分支和主分支之间是否存在任何冲突。

  2. 它会将所有测试提交“压缩”到主设备上的一个合并提交中; 也就是说在master分支上,我们看不到测试分支的所有更改日志。

所以,当我们怀疑会有一些冲突时,我们可以进行下面的git操作:

git checkout test
git pull 
git checkout master
git pull
git merge --no-ff --no-commit test

commit前测试merge ,避免通过--no-ff进行快速提交,

如果遇到冲突,我们可以运行git status来检查有关冲突的细节并尝试解决

git status

一旦我们解决了冲突,或者如果没有冲突,我们就会commitpush它们

git commit -m 'merge test branch'
git push

但是这种方式将会丢失测试分支中记录的变化历史记录,并且会使主分支难以让其他开发人员了解项目的历史。

所以最好的方法是我们必须使用rebase而不是merge (假设,在这个时候,我们已经解决了分支冲突)。

以下是一个简单的示例,对于高级操作,请参阅http://git-scm.com/book/en/v2/Git-Branching-Rebasing

git checkout master
git pull
git checkout test
git pull
git rebase -i master
git checkout master
git merge test

是的,当鞋底完成后,所有测试分支的提交将被移动到主分支的头部。 重新设计的主要好处是您可以获得线性和更清洁的项目历史。

你唯一需要避免的是:不要在公共分支上使用rebase ,比如master分支。

如下面的操作:

git checkout master
git rebase -i test

从不做这些操作。

https://www.atlassian.com/git/tutorials/merging-vs-rebasing/the-golden-rule-of-rebasing详细信息

附录:


Answer #2

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

发展中的常用方法是

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

当你准备好重新融入主人时,

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

如果你担心打破合并, git merge --abort就在你身边。

使用push然后pull作为合并的手段是愚蠢的。 我也不确定你为什么要将测试推向原点。


Answer #3

除了KingCrunches的回答 ,我建议使用

git checkout master
git pull origin master
git merge --squash test
git commit
git push origin master

您可能在另一个分支中进行了许多提交,这应该只是主分支中的一个提交。 为了保持提交历史尽可能的干净,你可能想要将测试分支中的所有提交压缩到主分支中的一个提交中(另请参阅: Git:压缩还是不压缩? )。 然后,您还可以将提交消息重写为非常有表现力的内容。 无需深入代码即可轻松阅读和理解。

编辑:你可能对此感兴趣

所以在GitHub上,我最终做了以下功能分支mybranch

从原点获取最新信息

$ git checkout master
$ git pull origin master

找到合并基础哈希:

$ git merge-base mybranch master
c193ea5e11f5699ae1f58b5b7029d1097395196f

$ git checkout mybranch
$ git rebase -i c193ea5e11f5699ae1f58b5b7029d1097395196f

现在确保只有第一个pick ,其余的是s

pick 00f1e76 Add first draft of the Pflichtenheft
s d1c84b6 Update to two class problem
s 7486cd8 Explain steps better

接下来选择一个非常好的提交消息并推送到GitHub。 然后进行拉取请求。

合并请求后,您可以在本地删除它:

$ git branch -d mybranch

和GitHub上

$ git push origin :mybranch




git-merge