我在本地拥有master
分支。我想合并仅存在于远程的feature1
分支。将它合并到我的master
分支的最快方法是什么?当我在master
并尝试git merge origin/feature1
时,其回报“已经是最新的”。
有什么比这更快/更好的方法吗?
git checkout feature1
git pull
git checkout master
git merge feature1
git branch -d feature1
答案 0 :(得分:2)
如果您是Git中的初学者(甚至是某种中间人),我建议您完全避免 git pull
。 (git pull
对我来说做了什么,作为Git早在2008年的初学者,大部分都让我感到困惑。:-)现在比以前更好,但它还不是那么好。)< / p>
git pull
的作用是:
git fetch
(带有一些选项/参数)。您可以选择运行哪个Git命令。默认值为git merge
,但另一个正常且有用的第二个命令是git rebase
。这个正在运行的git pull
或git pull --rebase
- 比必须运行两个单独的命令更方便。
但是:你怎么知道你应该使用哪个第二命令?嗯,这取决于不止一件事 - 但它所依赖的事情之一是由git fetch
取得的东西。但git pull
会让您在运行git fetch
之前决定,从而了解git fetch
取得的内容!因此,随着便利性的发展,git pull
存在一些缺陷。
git fetch origin
git merge origin/feature1
特别是,如果您希望在运行git fetch
时看到进入,您需要在运行git fetch
后让Git 停止 。然后,您可以运行git log origin/feature1
来查看它。然后,您可以运行git merge origin/feature1
,如果这仍然是您想要做的。也许你不想做 两个标准的第二步,或者至少,还没有。您将清楚地了解这两个步骤,并在跳到第二步之前查看选项。
git pull
如果您确定要使用git merge
,可以使用便捷模式合并这两个步骤:
git pull origin feature1
使用git pull
将运行以下两个命令:
git fetch origin feature1
这会将你的Git连接到另一个Git。另一个Git是通过以origin
的名称调用(以某种方式发短信,打电话,上网)可以访问的网址。 Git将此名称称为远程。
另一个Git有一些分支(分支名称,更准确)。其中一个分支大概是feature1
。你的Git问他们的Git名称feature1
标识了什么。你的Git会根据你的问题检查你是否已经有了这个提交 - 如果不是,那就要求他们的Git提交该提交,以及提交的父母和父母的父母,等等,直到这个父提交链导致你的Git 已经拥有的提交。
然后,您的Git会将所有这些提交存储在您自己的存储库中。如果您的Git不是太古老(至少是1.8.2),那么您的Git会通过更新您的远程跟踪名称 feature1
来记住他们的Git origin/feature1
。这是他们的分支名称,但它不是您的分支,因此您的Git 将重命名为其中一个远程跟踪名称。
您的Git还会将提交哈希ID存储在特殊文件.git/FETCH_HEAD
中。甚至在我开始使用的古老的Git版本中也会发生这种情况。这个存储是暂时的(它会被您运行的下一个git fetch
覆盖或者已经为您运行),这就是为什么有更永久,更好的origin/feature1
到记住你的哈希ID。
如果你跑:
git fetch origin
没有feature1
限制,你的Git仍然像以前一样调用他们的Git,但这次它检索所有他们的分支,并更新或创建所有相应的远程跟踪名称。我建议这样做,即使它可能带来一些你不需要的东西,因为如果这些提交存在名字&#34;那边&#34;那样你就可以把它们与你一起拥有远程跟踪名称&#34;在这里&#34;在您自己的Git存储库中,您可以在其中看到它们。
git merge -m "merge branch 'feature1' of url" hash-ID
此步骤合并其feature1
- 您的origin/feature1
- 名称的特定提交。这就是Git的合并无论如何都是如此(通过提交哈希ID)。它设置合并消息,使其不具有原始哈希ID。
如果你自己运行:
git merge origin/feature1
默认的合并消息将是merge branch origin/feature1
,这实际上同样有用。两者都不是一个很好的提交消息。好的人可能会读到:
合并功能X的实现
新功能X使得等等......简短 描述了它的全部内容 营销人员将变成销售高峰期
但几乎没有人愿意写出好的合并消息。
请注意,git merge
步骤可能存在合并冲突。由于合并是通过下面的提交哈希来实现的,因此启动合并的方式并不重要:它会产生相同的冲突,您将以相同的方式解决冲突。