【问题标题】:merging (git) origin to my current local working branch将(git)源合并到我当前的本地工作分支
【发布时间】:2017-09-13 16:24:32
【问题描述】:

我是 git 新手,我想澄清一下我过去几天在使用 git 时一直在做的事情,但我不太确定这是正确的做法。

所以,我们有origin(远程存储库)和master(该存储库的本地分支)

这是我开始工作的方式:

  1. git fetch origin //从origin(或remote)获取最新代码
  2. git merge origin/master // 将最新代码合并到本地 master
  3. 然后我创建新的分支离开主git checkout -b newbranch
  4. 现在我在 newbranch 上工作了 2-3 天,我意识到,我应该刷新我的 newbranch,因为其他人可能已经添加了一些新代码(我相信,术语称为“反向集成”)

这最后一步怎么做?

我相信如果我执行git fetch origin/git merge origin/master,那只会刷新(或反向集成)master

如果我使用git fetch origin/git merge origin/newbranch,那将不起作用,我会收到类似“merge: origin/newbranch- not something we can merge”的消息。

【问题讨论】:

    标签: git merge git-merge


    【解决方案1】:

    newbranch 应该是当前分支,以确保您可以签出它,然后使用 fetch 从您的 repo 中获取更新,然后将 newbranch 与 master 合并

    关于结帐:您当前正在使用的分支已经结帐。要切换到另一个分支,您需要检查它。如果您已经在使用分支,则不需要结帐。

    git checkout newbranch
    git fetch
    git merge origin/master
    

    你可以使用 rebase 代替 merge,在这种情况下最后一行应该被替换

    git rebase origin/master
    

    合并和变基只是使用来自其他分支的信息更新您的分支。合并从 master 获取提交并将它们添加到您的分支。 Rebase 以不同的方式做了同样的事情。见Merging vs. Rebasing。现在忘记变基,只做合并。

    【讨论】:

    • 请您介意详细说明一下,我是 git 新手。在上面的例子中,我已经创建了 newbranch,不知道为什么要调用 git checkout 或 rebase?
    • @pixel,添加了一些文字
    • 您介意解释一下我 2 岁时这两行的作用吗? (结帐和变基)。谢谢
    • 您当前使用的分支是结帐。要切换到另一个分支,您需要检查它。如果您已经在使用分支,则不需要结帐。
    • 合并和变基只是用其他分支的信息更新你的分支。合并从 master 获取提交并将它们添加到您的分支。 Rebase 以不同的方式做了同样的事情。见atlassian.com/git/tutorials/merging-vs-rebasing 现在忘记变基,只做合并
    【解决方案2】:

    我认为你应该这样做:

    1. git stash #将本地新分支的更改存储在堆栈中

    2. git pull --rebase origin/master #在本地newbranch取origin最新变化

    3. git stash pop #pop 将step1中的变化存入栈

    4. 如果存在冲突,您应该解决冲突,然后继续工作,直到您推送所有的原始更改。

    【讨论】:

    • @Maciej Jureczko,感谢您的编辑,这是我第一次在stackoverflow中回答问题,我不知道如何编辑格式。
    • 没关系,这就是审稿人的目的 :) 请确保您阅读了有关提问和回答的帮助部分:stackoverflow.com/help 祝你好运! :)
    【解决方案3】:
    git pull --rebase origin <branch name> 
    

    它将获取该分支的所有提交并将您的提交放在上面。

    【讨论】:

    • 你介意用我上面的例子详细说明一下吗,我是 git 新手?
    • git pull --rebase origin newbranch 新分支在 repo 上有一些新的提交。
    • 我没有在 newbranch 上做任何“添加”或“提交”。在合并之前我必须先这样做吗?这就是我上面的合并失败的原因吗?
    • 啊,明白了。 `stash` 是 git 的一大特色。 @pixel 如果您没有完成任务并且想要做更多事情,则意味着您处于任务中间并且想要获取最新提交的 repo - 然后运行以下命令 - git add --all 。 -> 添加所有文件 git stash 。 -> 它会将您的更改放入存储桶中 git pull --rebase origin newbranch 。 -> 获取分支git stash apply 的最新更改。 -> 弹出更改继续您的任务。
    • 我很困惑。我要做的就是刷新我的“新分支”,如上面问题中所述。所以,我当前的分支是“newbranch”,我有一些我没有“添加”或“提交”的更改。简单刷新'newbranch'的步骤是什么?
    【解决方案4】:

    我会推荐这个顺序:

    git fetch    # get all new upstream commits
    
    # bring master up to date
    git checkout master
    git merge    # equivalent to `git merge origin/master`
    
    # bring newbranch up to date
    git checkout newbranch
    git merge master
    

    第一次合并通常会导致快进,因此不会出现合并冲突。我强烈建议不要盲目使用任何使用 rebase 的解决方案:这将重写历史,git does not like lies.

    由于git pullgit fetch ; git merge相同,你也可以这样做:

    # bring master up to date
    git checkout master
    git pull
    
    # bring newbranch up to date
    git checkout newbranch
    git merge master
    

    这可以为您节省一行输入。

    【讨论】:

      猜你喜欢
      • 2021-01-12
      • 2012-09-18
      • 2016-03-20
      • 2015-11-05
      • 1970-01-01
      • 2011-11-03
      • 2011-11-01
      • 2020-07-30
      相关资源
      最近更新 更多