目录
Git 之 获取远程分支(fetch5种方法),并合并到本地分支(merge和rebase的2种方法)中
一、简单介绍
二、获取远程分支,并与构建对应本地分支的操作
1、方法一:git checkout targetbranch
2、方法二:git checkout -b 本地分支名 origin/远程分支名
3、方法三:git checkout --track origin/远程分支名
4、方法四:git checkout -t origin/远程分支名
5、方法五:fetch指定的一个分支:git fetch [repo] [remote_branch_name]:[local_branch_name]
三、远程分支,合并到本地分支的方法一(merge):
1、切换到把远程合并到的分支
2、 查看远程仓,找到远程要合并的远程分支
3、从远程仓orgin仓的 [remoteBranchName] 分支下载到本地,并在本地新建一个对应 [localBranchName] 分支
4、查看[localBranchName] 分支与本地要合并的当前分支的不同
5、将 [localBranchName] 分支和本地要合并的当前分支合并
6、push 推到远程服务器
7、删除temp分支 (酌情处理)
四、远程分支,合并到本地分支的方法一(rebase):
1、从远程仓orgin仓的 [remoteBranchName] 分支下载到本地,并在本地新建一个对应 [localBranchName] 分支
2、切换到远程分支下载的新建的本地分支 [localBranchName]
3、rebase 目标合并的本地分支 [targetBranchName]git rebase [targetBranchName]
4、切换分支,切到要合并的本地目标分支 [targetBranchName]上
5、合并分支 [localBranchName]
6、push 推到远程服务器
7、删除temp分支 (酌情处理)
附录:merge 和 rebase 的区别
Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1] Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
本节介绍,Git 对 远程分支获取和,远程分支合并到本地某个分支的简单操作。
(下面给出多种方法,大家可以酌情选择)
整理了五种方法,我常用最后一种,这五种方法(除了第4中已经写了fetch的步骤)执行前都需要执行git fetch来同步远程仓库
1)首先,获取远程所有分支
git fetch
2)查看所有远程分支,找到需要的远程分支,例如 origin/targetbranch
git branch -r
3)在本地新建一个同名分支,然后系统会自动与该远程分支关联
git checkout targetbranch
(注意(git checkout origin/mybranch 会进入detached head状态,不会在本地新建分支,不要这样写))
1)首先,获取远程所有分支
git fetch
2)创建与远程分支关联的本地分支(可以同名,也可以不同名;建议同名,方便管理)
git checkout -b 本地分支名 origin/远程分支名
1)首先,获取远程所有分支
git fetch
2)创建与远程分支关联的本地分支
git checkout --track origin/远程分支名
1)首先,获取远程所有分支
git fetch
2)创建与远程分支关联的本地分支
git checkout -t origin/远程分支名
1)获取远程指定分支,并创建与之关联的本地分支
git fetch [repo] [remote_branch_name]:[local_branch_name]
(举例:git fetch origin TargetBranch:tempBranch 从远程仓orgin仓的TargetBranch分支下载到本地,并新建一个tempBranch分支)
([remote_branch_name]:[local_branch_name] 可同名,也可不同名;建议同名,便于管理)
2)切换当前分支为本地建立的分支
git checkout [local_branch_name]
(注意:第一行的:[local_branch_name]如果不写,则本地新建的分支名默认与远程分支名相同)
(注意:前提,当前分支为远程分支要合并的分支;最好要合并的分支之前commit提交并 pull 和 push 一次,避免不必要的冲突)
git check [branchName]
git remote -v
( [remoteBranchName]:[localBranchName] 可以同名,也可以不同名;建议同名,便于管理)
git fetch origin [remoteBranchName]:[localBranchName]
(注意:按回车查看更多差异;输入 q 退出差异对比)
git diff [localBranchName]
git merge [localBranchName]
git push origin [targetBranchName]
git branch -d [localBranchName]
(注意:最好要合并的分支之前commit提交并 pull 和 push 一次,避免不必要的冲突)
( [remoteBranchName]:[localBranchName] 可以同名,也可以不同名;建议同名,便于管理)
git fetch origin [remoteBranchName]:[localBranchName]
git checkout [localBranchName]
git rebase [targetBranchName] 的过程是:
1)找到 [targetBranchName] 分支和 [localBranchName] 分支的最近的共同祖先2)将共同祖先到hotfix head之间的所有提交记录,存入临时文件,将当前分支的基准点设置为master分支的head
3)然后依次引用临时文件中的提交记录
在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;
1)在解决完冲突后,用"git-add"命令(git add .)去更新这些内容的索引(index)
git add .
2)然后,你无需执行 git-commit,只要执行
git rebase --continue
这样git会继续应用(apply)余下的补丁。
3)在任何时候,你可以用--abort参数来终止rebase的行动(git rebase --abort),并且 [targetBranchName] 分支会回到rebase开始前的状态
git rebase --abort
git checkout [targetBranchName]
git merge [localBranchName]
git push origin [targetBranchName]
git branch -d [localBranchName]
(参考博客:https://blog.csdn.net/m0_38022029/article/details/79054619)
1. git merge
咱们先来看一下第一种方法 —— git merge
在 Git 中合并两个分支时会产生一个特殊的提交记录,它有两个父节点。翻译成自然语言相当于:“我要把这两个父节点本身及它们所有的祖先都包含进来。”下面具体解释。
# 创建新分支 bugFix
git branch bugFix
# 切换到该分支
git checkout bugFix
# 提交一次
git commit
# 切换回 master
git checkout master
# 再提交一次
git commit
# 用 git merge 把 bugFix 合并到 master
git merge bugFix
(master 的分支被混入到所有的提交记录,但 bugFix 没有,所以要进行下面的操作)
# 再把 master 分支合并到 bugFix(因为 master 继承自 bugFix,Git什么都不用做,只是简单地把 bugFix 移动到 master所指向的那个提交记录。)
git checkout bugFix;
git merge master
2. git rebase
第二种合并分支的方法是 git rebase
。rebase 实际上就是取出一系列的提交记录,“复制”它们,然后在另外一个地方逐个的放下去。
Rebase 的优势就是可以创造更线性的提交历史,这听上去有些难以理解。如果只允许使用 Rebase 的话,代码库的提交历史将会变得异常清晰。
# 创建新分支 bugFix分支
git branch bugFix
#提交一次(提交在master分支上)
git commit
# 切换到bugFix分支
git checkout bugFix
# 提交一次(提交在bugFix分支上)
git commit
#使用git rebase
把 bugFix 分支里的工作直接移到 master 分支上(移动以后会使得两个分支的功能看起来像是按顺序开发,但实际上它们是并行开发#的)。
git rebase master
注意:提交记录 C3 依然存在(树上那个半透明的节点),而 C3'是我们 Rebase 到 master 分支上的 C3 的副本。
#切换到master分支上(为了进行更新master的操作)
git checkout master
#把master的 rebase 到 bugFix 分支上(由于 bugFix 继承自 master,所以 git 只是简单的把 master 分支的引用向前移动了一下而已。)
git rebase bugFix