【问题标题】:How can I merge a branch into master but continue working on the branch?如何将分支合并到 master 但继续在分支上工作?
【发布时间】:2014-11-19 09:36:36
【问题描述】:

我创建了一个分支来尝试不同的方法并且它有效,所以我想将“Farmcrops”分支合并到“Master”以保留这些更改,但继续“Farmcrops”分支以探索另一种可能性。这样,如果最新的更改不起作用,我可以恢复为“大师”,现在将包括第一轮更改。

我该怎么做?

【问题讨论】:

  • 新的探索仍然基于我将cropfarms更改为farmcrops,所以继续使用该分支对我来说是有意义的,但如果在git中更容易合并和再次分支,我可以这样做。

标签: git branch


【解决方案1】:

如果我理解正确,你是从

-- o -- o -- o [master]
    \
     o -- o [Farmcrops]

您不应该将Farmcrops 直接合并到master,因为您冒着破坏master 中的代码的风险,按照惯例,它应该更稳定。相反,请查看 Farmcrops 并将 master 合并到其中。

git checkout Farmcrops
git merge master

然后你会得到

-- o -- o -- o [master]
    \         \
     o -- o -- o [HEAD -> Farmcrops]

运行一些测试;确保一切按预期工作。然后查看master 并将Farmcrops 合并到其中:

git checkout master
git merge Farmcrops

然后您的 repo 将如下所示:

-- o -- o -- o
    \         \
     o -- o -- o [HEAD -> master,Farmcrops]

(请注意,此合并是快进:它不会创建合并提交,因为Farmcropsmaster 的直接后代。)

现在再次查看Farmcrops 并继续您的实验,对其进行更多提交等等...

-- o -- o -- o
    \         \
     o -- o -- o [master]
                \
                 o -- o -- o [HEAD -> Farmcrops]

如果您对Farmcrops 的新实验效果不佳,您可以随时使用master(如您所说,它现在包含“第一轮更改”)。

【讨论】:

  • 这方面的视觉效果非常有帮助。感谢您花时间将它们放入。
  • 请注意,第二次合并不需要创建另一个合并提交,因为Farmcropsmaster 的直接后代。它只是移动指针(快进)。这有助于我理解图表。
  • 这就是为什么您应该始终阅读已接受的答案并寻找具有更多选票的答案!
  • 如果您将 Farmcrops 合并到 master 中,您是否还拥有 Farmcrops 中 master 的所有更改?我以为 Farmcrops 合并后仍然是一个独立的分支,但似乎不是。
  • @SamMcCreery 谢谢。我在回答中添加了一个注释。
【解决方案2】:
  1. 合并功能分支 PR
  2. 在 GitHub 上删除功能分支
  3. git branch -d feature-branch
  4. git checkout -b feature-branch

【讨论】:

    【解决方案3】:

    这是您正在寻找的过程:

    1. git checkout master
    2. git merge Farmcrops
    3. git push origin master
    4. git branch -d Farmcrops
    5. git checkout master
    6. git checkout -b Farmcrops
    7. Farmcrops分支上继续你的提交...

    分支只是指针,创建/删除分支非常容易,如果您的分支Farmcrops 未推送到远程存储库,则绝对不依赖它。您可以在合并后将其删除并从 master 重新创建它。

    希望这会对你有所帮助。

    【讨论】:

    • 您不应该将Farmcrops 直接合并到master。首先将master 合并到Farmcrops 会更安全,检查那里的一切是否正常,然后才将Farmcrops 合并到master
    • @Jubobs 感谢您的建议,我从未尝试过这种方法。但是合并操作是在本地完成的,你有所有时间想要验证新版本,测试它并确保一切正常,不是吗?按照您的建议,首先合并似乎是一个无用的步骤
    • 即使一切都是本地的,第一次合并也很有用,因为它可以促进隔离:它可以避免在 master 上创建“错误”提交并且必须将 master 重置为一个其父级,或恢复master 上的最后一次提交。这是一个安全网。
    • 下次遇到这种情况时我会试试。感谢您的提示
    • 为什么要重新创建而不是继续?如果 Farmcrops 不仅在本地,而且在服务器上(用于备份安全性的 fi),则需要在本地和远程删除它,再次在本地创建,将其推送到远程,再次跟踪它......等等。合并到master中并继续是不是容易多了?
    【解决方案4】:

    在下面的链接中,解释了如何创建修补程序分支、进行更改并将其合并到主分支。唯一不同的是,hotfix 分支在合并后被删除。

    只使用 Farmcrops 作为分支名称,合并后不要删除分支。

    GIT-SCM: Basic Branching and Merging

    [步骤 1] 创建一个分支并进行更改

    $ git checkout Farmcrops
    Switched to a new branch 'Farmcrops'
    $ vim index.html
    $ git commit -a -m 'fix the broken email address'
    [Farmcrops 3a0874c] fix the broken email address
     1 files changed, 1 deletion(-)
    

    [STEP 2]然后,回到master分支并合并

    $ git checkout master
    $ git merge Farmcrops
    Updating f42c576..3a0874c
    Fast-forward
     README | 1 -
     1 file changed, 1 deletion(-)
    

    而且,如果您想在同一分支上进行更多更改,请再次应用 [步骤 1]。

    完成更改后,再次应用 [步骤 2]。

    根据需要执行这些步骤。

    一旦你完成了这个分支的工作,你就可以删除它。

    $ git branch -d Farmcrops
    Deleted branch Farmcrops (was 3a0874c).
    

    NOT:我建议不要合并,而是 rebase GIT-SCM: Rebase

    git rebase Farmcrops
    

    【讨论】:

    • 我更改声明; "git checkout -b Farmcrops" --> "git checkout Farmcrops" 因为分支区域已经存在,STEP 1 可以多次应用。
    猜你喜欢
    • 2021-04-16
    • 2018-04-14
    • 2016-04-30
    • 2019-03-12
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2013-01-14
    相关资源
    最近更新 更多