Git合并特定commits 到另一个分支

https://ariejan.net/2010/06/10/cherry-picking-specific-commits-from-another-branch/

http://blog.csdn.net/ybdesire/article/details/42145597

经常被问到如何从一个分支合并特定的commits到另一个分支。有时候你需要这样做,只合并你需要的那些commits,不需要的commits就不合并进去了。

  • 合并某个分支上的单个commit

首先,用git log或GitX工具查看一下你想选择哪些commits进行合并,例如:

dd2e86 - 946992 -9143a9 - a6fd86 - 5a6057 [master]

\

76cada - 62ecb3 - b886a0 [feature]

比如,feature 分支上的commit 62ecb3 非常重要,它含有一个bug的修改,或其他人想访问的内容。无论什么原因,你现在只需要将62ecb3 合并到master,而不合并feature上的其他commits,所以我们用git cherry-pick命令来做:

[plain] view plaincopy

  1. git checkout master
  2. git cherry-pick 62ecb3

这样就好啦。现在62ecb3 就被合并到master分支,并在master中添加了commit(作为一个新的commit)。cherry-pick 和merge比较类似,如果git不能合并代码改动(比如遇到合并冲突),git需要你自己来解决冲突并手动添加commit。

  • 合并某个分支上的一系列commits

在一些特性情况下,合并单个commit并不够,你需要合并一系列相连的commits。这种情况下就不要选择cherry-pick了,rebase 更适合。还以上例为例,假设你需要合并feature分支的commit76cada ~62ecb3 到master分支。

首先需要基于feature创建一个新的分支,并指明新分支的最后一个commit:

[plain] view plaincopy

  1. git checkout -bnewbranch 62ecb3

然后,rebase这个新分支的commit到master(--ontomaster)。76cada^ 指明你想从哪个特定的commit开始。

[plain] view plaincopy

  1. git rebase --ontomaster 76cada^

得到的结果就是feature分支的commit 76cada ~62ecb3 都被合并到了master分支。

I’m often asked how to merge only specific commits from another branch into the current one. The reason you’d want to do this is to merge specific changes you need now, leaving other code changes you’re not interested in right now behind.

First of all, use git log or the awesome GitX tool to see exactly which commit you want to pick. An example:

dd2e86 - 946992 - 9143a9 - a6fd86 - 5a6057 [master]
                       76cada - 62ecb3 - b886a0 [feature]

Let’s say you’ve written some code in commit 62ecb3 of the feature branch that is very important right now. It may contain a bug fix or code that other people need to have access to now. Whatever the reason, you want to have commit 62ecb3 in the master branch right now, but not the other code you’ve written in the feature branch. ~ Here comes git cherry-pick. In this case, 62ecb3 is the cherry and you want to pick it!

git checkout master
git cherry-pick 62ecb3

That’s all. 62ecb3 is now applied to the master branch and commited (as a new commit) in mastercherry-pick behaves just like merge. If git can’t apply the changes (e.g. you get merge conflicts), git leaves you to resolve the conflicts manually and make the commit yourself.

Cherry picking a range of commits

In some cases picking one single commit is not enough. You need, let’s say three consecutive commits. cherry-pick is not the right tool for this. rebase is. From the previous example, you’d want commit 76cada and 62ecb3 in master.

The flow is to first create a new branch from feature at the last commit you want, in this case 62ecb3.

git checkout -b newbranch 62ecb3

Next up, you rebase the newbranch commit --onto master. The 76cada^ indicates that you want to start from that specific commit.

git rebase --onto master 76cada^

The result is that commits 76cada through 62ecb3 are applied to master.

时间: 2024-11-08 21:05:51

Git合并特定commits 到另一个分支的相关文章

git合并某次提交到某个分支

有的时候,在develop分支开发,是大家公用的开发分支,但是只想合并自己提交的到master,如何操作呢?那就要用cherry-pick了. 语法 git  cherry-pick commitid 首先,git log查看自己提交的log,找到版本号,如最近的版本号是 ee3c72 然后,切换到想要合并的分支,如想把develop的合并到master,切换到master,执行 git  cherry-pick ee3c72,执行完之后,提交就会在master上体现了,然后push,就可以了.

git 基本操作——上传文件与项目分支管理

创建并转入新分支:git checkout –b XX(其中XX代表分支名称) 将新分支发布在github上: git push origin Branch1 往分支中添加文件:git add master/XX(master中的XX文件)或者git add XX(XX文件) 添加文件注释:git commit –m “XX” push:git push –u origin XX(之前的分支名称) 或push:git push 合并分支:先转入到master分支git checkout mast

git 使用详解(8)-- 分支的新建与合并

分支的新建与合并 现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程: 1. 开发某个网站. 2. 为实现某个新的需求,创建一个分支. 3. 在这个分支上开展工作. 假设此时,你突然接到一个电话说有个很严重的问题需要紧急修补,那么可以按照下面的方式处理: 1. 返回到原先已经发布到生产服务器上的分支. 2. 为这次紧急修补建立一个新分支,并在其中修复问题. 3. 通过测试后,回到生产服务器所在的分支,将修补分支合并进来,然后再推送到生产服务器上. 4. 切换到之前实现

Git的使用-一个分支完全替换另一个分支

之前公司git分支混乱,今天花时间整理了一下,在合并分支的时候遇到一个问题: 一个很久没有拉取远程代码的分支与master分支合并时,出现冲突之外,还会丢失文件,很头疼,然后找到了下面的方法,可以直接将一个分支替换另一个分支 git push origin develop:master -f 把本地的 develop 分支强制(-f)推送到远程 master 但是上面操作,本地的 master 分支还是旧的,通常来说应该在本地做好修改再去 push 到远端,所以我推荐如下操作 git check

Git合并分支出现的冲突解决

人生不如意之事十有八九,合并分支往往也不是一帆风顺的. 我们准备新的分支newbranch. [email protected]V-PC MINGW32 /c/gitskill (master)$ git checkout -b newbranchSwitched to a new branch 'newbranch' 修改readme.txt,在最后一行添加: $ cat readme.txtmaster分支内容添加dev分支内容分支合并测试 在分支newbranch上提交: [email p

Git 合并分支

git merge 用来做分支合并,将其他分支中的内容合并到当前分支中.比如分支结构如下: master / C0 ---- C1 ---- C2 ---- C4 C3 ---- C5 issueFix 当前分支是master $ git checkout master 把issueFix中的内容Merge进来: $ git merge issueFix 如果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突: $ g

git合并分支操作

1.创建其他分支 git checkout -b mergedemo 创建文件   vi 123.text 12334 1233 ESC  冒号 wq cat 123.text git add 123.text 追踪下这个文件 git commit -m "增加合并的内容" git push --set-upstream origin mergedemo 修改的内容推送到远程端  因为是新建的·分支 所以 不能单单用 git push git checkout master切换到主分支

git 从分支上创建一个分支

相关连接: 创建于合并分支:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000 git从已有分支拉新分支:https://www.cnblogs.com/lingear/p/6062093.html 来源:https://www.cnblogs.com/jiqing9006/p/8

git 合并其他仓库的分支

仓库A的master分支,需要合到仓库B的master分支 主仓库:company:master 我的仓库:yoyocheknow:master 合并步骤: 1:将主仓库的地址添加到自己本地的远程仓库中 git remote add 仓库名称 地址 git remote add companyMaster [email protected]:company/code.git 现在git remote 一下可以看见本地有两个远程仓库: git remote companyMaster origin