【问题标题】:Changes in branch after merge in gitgit合并后分支的变化
【发布时间】:2017-08-04 19:52:33
【问题描述】:

在我使用 git 管理的项目中,master 下有两个分支,foobar。假设我在foo 下工作,完成后,我将更改与master 合并。然后我去bar 并重复这个过程。但后来有人告诉我,我必须在foo 上更改一些内容,所以我的第一个想法是再次重复,但后来我失去了在bar 分支下完成的所有工作。如何实现回到分支的目的,然后当我与 master 合并时,我不会覆盖在 bar 下所做的更改

我尝试为这些新更改创建一个新分支,但如果这是方法,我发现分支有点没用。但我认为 git 足够聪明,可以做我想做的事。

【问题讨论】:

  • “那我去酒吧重复这个过程”是什么意思?你要合并到哪里?关于“我觉得分支有点没用”,我认为这真的取决于你的工作流程。它很可能对你正在做的事情毫无用处。但是,在协作环境中,每个分支都会进行代码审查和自动化测试,提供有关更改的反馈。分支在那种环境中非常有用。

标签: git github merge branch


【解决方案1】:

用一系列图表回答:

--

在提交 C: 后创建 foobar 关闭 master:

                       foo
                      /
master A ---- B ---- C
                      \
                       bar

处理foo 并合并到master: (git checkout master && git merge foo)

foo                    D ---- E ---- F
                      /               \ (merge-commit)
master A ---- B ---- C --------------- G 
                      \
                       bar

与此同时,bar 独立进步..

foo                    D ---- E ---- F
                      /               \
master A ---- B ---- C --------------- G 
                      \
bar                    D' ---- E' ----- F'

您现在希望将bar 更新为master (git pull origin master)

foo                    D ---- E ----------- F
                      /                      \
master A ---- B ---- C ---------------------- G 
                      \                        \
bar                    D' ---- E' ----- F' ---- G' (another merge-commit)

foo 上提交的另一个更改

foo                    D ---- E ----------- F ---- H
                      /                      \
master A ---- B ---- C ---------------------- G 
                      \                        \
bar                    D' ---- E' ----- F' ---- G'

然后,将bar 与新的foo (git checkout bar && git pull origin foo) 同步

foo                    D ---- E ----------- F ---- H
                      /                      \      \
master A ---- B ---- C ---------------------- G      \
                      \                        \      \
bar                    D' ---- E' ----- F' ---- G'---- H' (another merge-commit) 

然后将bar 合并到master 中(master 作为活动分支,git merge bar

foo                    D ---- E ----------- F ---- H
                      /                      \      \
master A ---- B ---- C ---------------------- G -----}-------- I (latest merge-commit)
                      \                        \      \      /
bar                    D' ---- E' ----- F' ---- G'---- H' ---

【讨论】:

  • 这看起来像是我想做的事情。我稍后会尝试并发表评论。 merge-commit 是命令吗?在最后一步中,您可以使用master 而不是bar 同步吗?
  • no merge-commit 不是命令,而是合并两个分支后的新提交。
  • 尝试将bar 更改为master 的最后一步,但没有在master 中获得foo 的更新。知道为什么吗?
  • 在最后一步之前foo 是否被拉入bar
  • 我错过了这一步。非常感谢
【解决方案2】:

然后我去酒吧重复这个过程

为什么不在 bar 中合并 master 或 foo 呢?我不清楚。

但是后来有人告诉我,我必须在 foo 上更改一些内容,所以我的第一个想法是再次重复,但后来我失去了在 bar 分支下完成的所有工作。

重复是什么意思?提交您最后的更改并签出另一个分支。

此外,如果您进行了不会提交的更改,您可以使用 git stash 临时存储更改。

请说明您的问题以获得更详细的帮助。

【讨论】:

  • 我想使用master 来获得最新版本,即每个分支的最新提交。那是我的问题,当我将更改添加到master 后面的分支时,我无法达到合并的目的:将master 分支与另一个分支上所做的更改结合起来
【解决方案3】:

如果你的foobar 分支还没有被删除,你可以rebase

git checkout master
git pull
git checkout foo
git rebase master
git checkout bar
git rebase master

但理想情况下,如果您的 foobar 分支是一个功能/问题,您应该只在完成后将它们合并到主控。如果它太大,把它分解成更小的分支(嵌套或扁平)。

我不会覆盖在 bar 下所做的更改

这取决于您的更改以及为什么要关心,无论如何您都将bar 分支合并到master。如果他所做的工作是修改的,那与bar 无关,因为该功能/修复已完成(这就是您合并它的原因)。实际上,当您完成一个功能/修复分支并将其合并为 master 时,理想情况下您将其删除,因为它已完成。

【讨论】:

    猜你喜欢
    • 2013-10-31
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2013-12-21
    • 2011-10-16
    • 1970-01-01
    • 2018-08-06
    相关资源
    最近更新 更多