Git(bitbucket)将先前的提交合并到master

时间:2020-05-19 07:28:11

标签: git bitbucket git-merge

我有一个develop分支(例如,在提交c处),它比master前面的许多提交(例如在提交a处)。但是我忘了将生产代码(例如在提交b处)推入master或单独的分支中。

是否可以将我的生产代码(即,develop分支中的较早提交)推送/合并到master中?

a (master branch)

a           b                   c (develop branch)
            (Need this commit               
            merged to master)

编辑:我不希望将开发中的所有提交合并/推送到主提交,这很容易。我只希望将直到上一个提交(而不是最后一个提交)的代码合并到master。我在测试服务器中有这段代码。

3 个答案:

答案 0 :(得分:1)

在不更改a的情况下,您不能在cc之间插入提交。由于您已经推送了c,所以有人可以使用它来开始工作,我的建议是避免在两者之间重新设置b

话虽如此,最好的选择可能是将b推到一个新分支,然后将git merge c推到b上,这样您现在拥有以下内容,然后合并到master。

  d    <-- merge devel into new branch
 /|
| b    <-- new branch
| |
c |    <-- develop HEAD
| /
a      <-- master HEAD

一旦您在这里,请合并到master上,或重新开发。这很丑陋,但避免破坏任何人的工作。

编辑

如果您不希望将c合并为master,而仅合并b,则情况会有所不同。方案A:您想像gitflow一样保留分支develop。然后,您需要(在开发中):

git reset --hard git添加 git commit -m“回滚c” git push

这将在c之后添加一个新提交,该提交与a相同。记住,我们不想破坏其他人的生命。

然后,git push将b提交到开发。怎么样?可能您有一些未提交的更改。确保暂时git stash处理这些develop,先回滚c然后回滚git stash pop,解决所有冲突并创建新的提交b

您的开发现在将如下所示:

a -> c -> a(rollback) -> b

答案 1 :(得分:1)

您的问题的解决方案是简单地将提交b之前的所有内容合并到master中。

在您的情况下,以下命令应针对您要执行的操作:

git checkout develop
git rebase master # Always suggested to avoid unneeded merge c onflicts
git checkout master
git merge <commit-id of b>

下面的小脚本可让您创建一种沙盒,以在这种情况下发挥作用

mkdir sandbox
cd sandbox
git init
touch a.txt
git add a.txt
git commit -m "Added a.txt" a.txt
git checkout -b develop
touch b.txt
git add b.txt
git commit -m "Added b.txt" b.txt
touch c.txt
git add c.txt
git commit -m "Added c.txt" c.txt
git rebase master
git checkout master

答案 2 :(得分:1)

如果您要描述的情况如下:

a--*--*--*--b--*--*--*--c
^           ^           ^
master      |           |
            |           develop
            |
 (not marked by a branch, but this is the commit in production)

只需将master移至b即可:

# one the many ways to do this :
git checkout master
git merge --ff-only b

--ff-only不是强制性的,您将100%确保:

  • masterb的确是“快进”操作,
  • 或什么也没有发生,您将不得不查看masterb的历史来确定您应该做什么