git本地怎么拉取新分支
一、本地拉取新分支
命令详解
当我们需要以当前分支为起点创建一个新的分支时,主要会用到以下两个命令:
1、创建分支
git branch <branch>
2、切换到新分支
git checkout <branch>
-b 创建并切换到新分支 (上面两个命令的合集)
git checkout -b <branch>
-B 重置分支(删除已存在的分支且重新创建,分支不存在也不会报错)
git checkout -B <branch>
创建分支的三种方式
1、基于远程库分支创建分支
语法格式
git checkout -b <new-branch> origin/<old-branch>
使用示例: 以远程库中的master分支为起点,在本地创建一个 dev 分支
git checkout -b dev origin/master
如果不知道有哪些可用的远程分支,可使用以下命令检查:
git branch -r
2、基于指定标签创建分支
切换到标签对应的提交记录
git checkout <tagname>
创建并切换到新分支
git checkout -b <branch>
3、基于指定 commit id 创建分支
切换到指定提交记录
git checkout <commit id>
创建并切换到新分支
git checkout -b <branch>
二、解决git push提示不成功
错误提示如下:
$ git push
fatal: The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use
git push origin HEAD:master
To push to the branch of the same name on the remote, use
git push origin dev
To choose either option permanently, see push.default in 'git help config'.
根本原因在于本地分支dev是从远程分支master拉取的,在执行git push命令时,不知道应该与远程哪个分支进行同步,就会出现上面那个错误。
解决办法有2个:
1、采取给出的建议
git push origin dev
2、可以重新指定与远程同名的分支(推荐这种方式,执行之后以后就可以git push了)
git push -u origin dev
参考: git fatal: The upstream branch of your current branch does not match the name of your current branch
三、撤销分支合并的两种方式
1、git reset
此方式是以代码回退的方式撤销分支合并,详情请看: Git远程仓库版本回退
2、git revert
revert 可以撤销指定的提交内容,撤销后会生成一个新的commit。
a、两种commit
当讨论 revert 时,需要分两种情况,因为 commit 分为两种:一种是常规的 commit,也就是使用 git commit 提交的 commit;另一种是 merge commit,在使用 git merge 合并两个分支之后,你将会得到一个新的 merge commit。
merge commit 和普通 commit 的不同之处在于 merge commit 包含两个 parent commit,代表该 merge commit 是从哪两个 commit 合并过来的。
在上图所示的第一个commit信息:
commit 2211113c88bb15b8b3a6f7fab86cad17ad4a41bc
Merge: 940c192 a9f81b9
这代表该 merge commit 是从 940c192 和 a9f81b9 两个 commit 合并过来的,而常规的 commit 则没有 Merge 行。
b、revert 常规commit:
使用 git revert 即可,git 会生成一个新的 commit,将指定的 commit 内容从当前分支上撤除。
c、revert merge commit:
revert merge commit 有一些不同,这时需要添加 -m 选项以代表这次 revert 的是一个 merge commit;
但如果直接使用 git revert ,git 也不知道到底要撤除哪一条分支上的内容,这时需要指定一个 parent number 标识出"主线",主线的内容将会保留,而另一条分支的内容将被 revert。
如上面的例子中,merge commit 的 parent 分别为 940c192 和 a9f81b9,其中 940c192 代表 master 分支,a9f81b9 代表 will-be-revert 分支。需要注意的是 -m 选项接收的参数是一个数字,数字取值为 1 和 2,也就是 Merge 行里面列出来的第一个还是第二个,其含义用来保留某个分支。
我们要 revert will-be-revert 分支上的内容,即 保留主分支,应该设置主分支为主线,操作如下:
git revert -m 1 2211113
注意:对于被revert的代码,想要重新merge或者cherry-pick过来,需要先撤销之前的revert,否则之前revert的代码是无法再重新合并过来的,详情请看: Git 之 revert