我有两个分支,电子邮件和分期。分期是最新的一个,我不再需要旧的更改在电子邮件分支,但我不想删除他们。
我只想将所有staging的内容转储到电子邮件中,以便它们都指向同一个提交。这可能吗?
我有两个分支,电子邮件和分期。分期是最新的一个,我不再需要旧的更改在电子邮件分支,但我不想删除他们。
我只想将所有staging的内容转储到电子邮件中,以便它们都指向同一个提交。这可能吗?
当前回答
我已经看到了几个答案,这是唯一的程序,让我解决没有任何冲突。
如果你想要在branch_old中对branch_new的所有更改,那么:
git checkout branch_new
git merge -s ours branch_old
git checkout branch_old
git merge branch_new
一旦应用了这四个命令,您就可以毫无问题地推送branch_old了
其他回答
我想合并两个分支,以便old_branch中的所有内容都与new_branch中的内容更新
对我来说,这就像一个魔法:
$ git checkout new_branch
$ git merge -m 'merge message' -s ours origin/old_branch
$ git checkout old_branch
$ git merge new_branch
$ git push origin old_branch
其他答案似乎不完整。 我已经尝试了下面的全部,它工作得很好。
注意: 1. 为了安全起见,在尝试下面的操作之前,请先复制您的存储库。
细节: 1. 所有的开发都在开发分支中进行 2. Qa部门只是开发部门的翻版 3.有时,开发代码需要被移动/覆盖到qa部门
所以我们需要覆盖qa分支,从开发分支
第1部分: 使用以下命令,旧的qa已经更新到新的开发:
git checkout dev
git merge -s ours qa
git checkout qa
git merge dev
git push
最后一次推送的自动评论如下:
// Output:
// *<MYNAME> Merge branch 'qa' into dev,*
这个注释看起来是相反的,因为上面的序列看起来也是相反的
第2部分:
下面是意想不到的,新的本地提交在开发中,不必要的 所以,我们需要抛弃这些内容,保持开发者的原封不动。
git checkout dev
// Output:
// Switched to branch 'dev'
// Your branch is ahead of 'origin/dev' by 15 commits.
// (use "git push" to publish your local commits)
git reset --hard origin/dev
// Now we threw away the unexpected commits
第3部分: 验证一切如预期:
git status
// Output:
// *On branch dev
// Your branch is up-to-date with 'origin/dev'.
// nothing to commit, working tree clean*
这是所有。 1. 旧的qa现在被新的开发分支代码覆盖 2. 本地是干净的(远程源/dev是不受影响的)
git checkout email
git merge -m "Making email same as staging disregarding any conflicts from email in the process" -s recursive -X theirs staging
我尝试了@knittl的写树/提交树方法。
分支-a:保留分支
分支-b:废弃分支
// goto branch-a branch
$ git checkout branch-a
$ git write-tree
6fa6989240d2fc6490f8215682a20c63dac5560a // echo tree id? I guess
$ git commit-tree -p branch-a -p branch-b 6fa6989240d2fc6490f8215682a20c63dac5560a
<type some commit message end with Ctrl-d>
20bc36a2b0f2537ed11328d1aedd9c3cff2e87e9 // echo new commit id
$ git reset --hard 20bc36a2b0f2537ed11328d1aedd9c3cff2e87e9
这个分支不会改变原来更新的分支,并让您有机会在最终提交之前进行进一步的修改。
git checkout new -b tmp
git merge -s ours old -m 'irrelevant'
git checkout old
git merge --squash tmp
git branch -D tmp
#do any other stuff you want
git add -A; git commit -m 'foo' #commit (or however you like)