【问题标题】:Do I have to manually merge a branch with master after pushing the branch to github?将分支推送到github后是否必须手动将分支与master合并?
【发布时间】:2017-08-02 01:09:39
【问题描述】:

我问这个问题是因为我有点困惑(只是有点)。

当我使用 Pycharm (在除 master 之外的分支上) 时,它为我提供了提交分支的更改并将其推送到 github 的机会。

所以我就这么做了。

现在...

之后,我运行这个:

current branch *test

1.git pull origin master
2.git checkout master
3.git merge test

1. 上,它告诉我一切都是最新的。然后转到3.,它还告诉我master 是最新的。

问题:

  1. 当我将分支提交到 github 时会发生什么?
  2. 将分支推送到 master 后是否必须运行上面的代码块?

编辑

  1. 我从master branch开始
  2. 我运行git checkout test

出现一条消息。

switched to branch test. your branch is ahead of origin/test by 3 commits.
(use "git push" to publish your local commits)
  1. 我运行命令git pull origin master

会出现一条消息,其中包含多行显示正在更新的分支。

  1. 我重新运行命令git pull origin master

    一条来自http://github.com/username/project的消息出现

    • 分支主-> FETCH_HEAD 已经是最新的
  2. 我按下绿色按钮提交更改并推送。出现一个弹出窗口nothing to commit

  3. 我运行命令git checkout master

您的分支已经与 origin/master 保持同步

  1. 我运行命令git merge test

    所有最新的!!!

那为什么是git merge test

【问题讨论】:

    标签: git github git-branch git-push


    【解决方案1】:

    在 1. 它告诉我一切都是最新的。然后继续 3. 它还告诉我所有与主人的最新情况。

    $ git pull origin master
    

    这个命令的作用相当于

    $ git fetch origin master
    $ git merge master
    

    第一步从origin 远程(这是您的GitHub 存储库的昵称)中的master 分支下载所有更改。第二个命令将master(现在包括来自 GitHub 的任何更改)合并到当前分支(test)。由于您可能在 master 上创建了分支并且没有进行任何其他更改,因此您会收到所有内容都是最新的消息。

    我不确定为什么第 3 步说一切都是最新的。您可能执行了其他未在此处发布的命令,将相同的更改直接提交到 master 或合并 test 之前。

    问题:

    1. 当我将分支提交到 github 时会发生什么?

    当您将分支推送到 GitHub 时,您会在 GitHub 存储库中创建该分支以及它所代表的整个更改历史记录。任何其他分支都没有任何变化,包括master

    在我将该分支推送到 master 之后,我是否必须运行上面的代码块?

    "push a branch to master" 没有任何意义,因为master 也是一个分支。您只能将分支推送到远程。或者您可以将一个分支合并到另一个分支。

    要使用本地更改更新 GitHub 存储库,您有两种选择:

    1. 手动合并你的分支到master,然后将master推送到GitHub

      $ git checkout master
      $ git merge test
      $ git push origin master
      

      请注意,这仅执行原始命令中的第 2 步和第 3 步。您原来的第 1 步将master 合并为test。仅当 master 发生更改并且您想要检查合并冲突并在它们存在时解决它们时才需要这样做。相反,您想做相反的事情:将test 合并到master。这就是为什么我先签出master 然后合并test

    2. 将分支推送到 GitHub 并在您的 GitHub 存储库中创建一个拉取请求。然后当你合并 PR 时,GitHub 上的master 将被更新,你需要将更改拉回你的本地 repo:

      $ git checkout master
      $ git pull origin master
      

    附言如果您愿意,您可以在 PyCharm 中执行所有这些命令的等效操作。

    【讨论】:

    • 我刚刚编辑了我的帖子。谢谢您的回复。不那么困惑,但仍然困惑。
    • @GeorgePamfilis 我认为您应该重新阅读我解释git pull origin master 的作用的段落。特别是,它改变了当前分支,不一定是master。我仅在其他人对 master 进行更改时才使用此命令,并且我首先执行 git checkout master,以便我可以使用其他人的更改更新我自己的 master。此外,当第一次尝试成功时,再次运行相同的命令两次没有任何意义。即使第一次尝试失败,您也需要在再次运行命令之前采取必要的措施来修复它。
    • @GeorgePamfilis “那为什么是git merge test?”我在第 1 部分中解释了如何使用本地更改更新 GitHub 存储库。希望我最近的编辑比原来的更清晰。
    【解决方案2】:

    是的。您必须手动合并分支。因为在当前状态下,您的仓库中有两个分支。所以如果你想将新分支合并到主分支,那么

    git checkout master
    git merge <your-new-branch>
    git push -u origin master
    

    这应该可以完成工作。

    【讨论】:

      猜你喜欢
      • 2016-03-30
      • 2019-09-25
      • 2016-04-30
      • 2014-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      相关资源
      最近更新 更多