Git - 找到另一个分支基于

时间:2017-05-22 11:04:57

标签: git version-control merge

我们有以下GIT"工作习惯"。我将很快描述它以澄清我后来问题的背景。

我们与三个永久分支机构合作( DEV STAGE MASTER )。 通常, STAGE 应与 MASTER 同步。但 DEV 总是被视为"脏"这意味着它可以包含许多从未合并到 STAGE MASTER 的提交。我们只将功能分支或单个提交从 DEV 合并到 STAGE 。然后我们将 STAGE 合并到 MASTER

现在,在某些时候,我们开始了一个巨大的变革集#34; (主要项目升级)并创建了一个专门的功能分支,比如说 UPGRADE 。 关于此功能的工作持续了3个月。

现在我想将这个巨大的功能分支合并到 STAGE ,但我不能100%确定我是否从 STAGE / MASTER <创建分支 UPGRADE / strong>或来自 DEV 。 我们没有记录这一点。

由于 DEV 是&#34;脏&#34;如果 UPGRADE DEV 分支,我无法合并!

所以这是我的问题:现在我想确定我们从 STAGE / MASTER 分支升级而不是 DEV (我应该选择STAGE / MASTER但我现在不确定。如何从repositry中获取最可靠的信息?

我已经做了一些研究,并尝试使用&#34; git merge-base &#34;。 这是我试过的三个命令。

1)git show --summary 'git merge-base upgrade dev'

2)git show --summary 'git merge-base upgrade stage'

3)git show --summary 'git merge-base upgrade master'

但它们都提供了相同的树木,只有几天的时间。

所以我再次提出问题:现在我想确保我们从 STAGE / MASTER 分支 UPGRADE ,而不是从 DEV 分支。如何从repositry中获取最可靠的信息?

1 个答案:

答案 0 :(得分:1)

更简单的方法是使用以下任何命令:

git log --oneline --decorate --graph --all
gitk --all

您可以显然查看分支结构。例如下图中有masternew分支,我们可以从new分支创建master分支。您可以使用相同的方法查找 UPDATE 的创建位置。

* 0d04f17 (HEAD -> master, origin/master, origin/HEAD) 5
* 74d5ed3 5
* 6146194 4
* e5ddeac 3
* a33f9ee 2
* 8373f5d hi1
* 3df7047 hi
* 3f27319 6
| * f0cca03 (new) 1
|/
* 38236ae Update config

Rebase UPDATE分支到过去的提交

假设UPDATE分支是从DEV分支创建的,过去的提交是提交D,提交历史记录如下:

A---B---C---D---E     master
     \
      F---G---H---I   DEV
           \
            J---K---L UPDATE

1.Rebase UPDATE直接(不保留原始UPDATE分支):

git  rebase --onto <commit id for D> DEV UPDATE

然后提交历史记录将如下:

              J'---K'---L' UPDATE
             /
A---B---C---D---E          master
     \
      F---G---H---I        DEV

2.Rebase将UPDATE更改为新分支并保留原始UPDATE分支:

git checkout -b new <commit id for D>
git rebase --onto new DEV <commit id for L>
git branch -f new
git checkout new

然后提交历史记录将如下:

              J'---K'---L' new
             /
A---B---C---D---E          master
     \
      F---G---H---I        DEV
           \
            J---K---L      UPDATE