美文网首页
LearningGitBranch

LearningGitBranch

作者: RexHuang | 来源:发表于2020-02-10 17:57 被阅读0次

地址

在线学习Git

记录

基础篇

//提交记录
git commit

//创建分支
git branch

//合并的两种方式,两种方式区别在于提交远程仓库时,是保存提交的原始历史还是保存较为干净的提交树,以A分支合并B分支为例。
//第一种,在A(HEAD位置)分支中合并B分支,会在A分支提交新的记录。
git merge B
//第二种,从B(HEAD位置)分支取出一系列的提交记录"复制"它们再以A分支为父节点,将记录放入。
git rebase A
//也可以不管HEAD位置在哪,直接合并。
git rebase A B

高级篇

//分离HEAD,xx可为某提交记录的hash值、某tag。
git checkout xx

//相对引用(^),作用是指向某个提交记录的上一个记录。
git checkout HEAD^

//相对引用2(~),作用是指向某个提交记录的上x个记录。
git checkout HEAD~3

//撤销变更,reset用于回溯某个历史提交,回溯前的历史提交不再在提交历史树上;revert是回溯某个历史提交的,产生一个新的历史提交,并且回溯前的历史提交仍在历史树上。
git reset
git revert

移动提交记录

//Git Cherry-Pick,选择需要的提交记录的hash值,复制这些记录并顺序加入到当前HEAD后面。
git cherry-pick c1 c2 c3

//交互式rebase
git rebase -i xx

杂项

//只提取一个记录

//提交的技巧

//提交的技巧2

//Git Tag,以给c1提交历史打上v1标签为例
git tag v1 c1

//Git Describe,描述距离当前提交记录最近的标签,ref可为任何能被Git识别成提交记录的引用;若没有指定,则以HEAD位置为目标。
git describe <ref>
//输出结果,<tag>表示离ref最近的标签,numCommits是表示这个ref与tag相差多少个提交记录,hash表示tag的提交记录hash。
//当ref提交记录上有某个标签时,则只输出标签名称。
<tag>_<numCommits>_g<hash>

高级

//多次rebase

//两个父节点,一个合并提交有两个父节点,可以用(^)加数字表示选择哪个父节点,Git默认选择合并提交的第一个父提交,如切换到master的第二个父节点:
git checkout master^2

//纠缠不清的分支

Push & Pull - 远程仓库

//Git Clone,通过网络协议如http、git、ssh克隆仓库。
git clone http....

//远程分支,如origin/master即为远程仓库对应的远程分支。
origin/master
origin/feature
origin/develop等

//Git Fetch,同步远程仓库和本地仓库的远程分支的操作。
git fetch http...

//Git Pull,同步远程仓库和本地仓库的远程分支同时合并到相应的本地分支中,相当于fetch+merge。
git pull http...

//模拟团队合作

//Git push,同步本地仓库的变更上传到指定的远程仓库,并更新本地仓库的远程分支,不带参数的行为与Git的push.default的配置有关。
git push

//偏离的提交历史,push前要先pull合并更新后的远程仓库的历史,有两种方式,可以是fetch后merge(即pull),也可以是fetch后rebase(即pull --rebase)。

//锁定的master,需要一些pull request流程才能合并修改master分支,即以当前HEAD记录新建分支往远程仓库提交新的分支,并恢复master分支与远程仓库master同步。

关于origin和它的周边 - Git远程仓库高级操作

//推送主分支,即本地开发时会产生很多分支,当推送远程仓库时,可以合并其他分支到master分支再推送到远程仓库的主分支上,使用rebase进行操作。

//合并远程仓库,rebase和merge两种方式基于你对提交树的要求来选择。

//远程追踪,即如何关联本地分支和远程分支,如master和origin/master的关联关系是由分支的remote tracking属性决定的。
//当clone仓库时,Git会自动设置这个属性;以及自己可以指定这个属性,第一种方式可以通过远程仓库检出一个新的分支。
git checkout -b totallyNotMaster origin/master
//第二种方式如下,若不指定分支名,则会设置当前分支和远程分支关联。
git branch -u origin/master totallyNotMaster

//Git Push的参数(重点,也适用于fetch,pull),<remote>指定远程仓库,<place>是同时指定了提交记录的来源和去向。
git push <remote> <place>

//Git Push的参数2(重点,也适用于fetch,pull),当来源和去向分支不一样时,用:将二者连在一起;若去向分支在远程仓库不存在,Git会为我们自动创建。
git push <remote> <source>:<destination>

//Git fetch的参数,与push相似,只是方向相反,<place>参数是指定远程仓库的来源分支以及本地仓库的去向分支(注意是更新了远程分支)。
git fetch <remote> <place>

//Git fetch的参数,与push相似,只是方向相反,<source>是指远程仓库上的位置,而<destination>是要下载到的本地仓库的位置。若git fetch没有参数,则会下载所有的提交记录到各个远程分支。
git fetch <remote> <source>:<destination>

//没有source的情况。
//删除远程仓库的side分支。
git push origin :side
//创建本地的分支。
git fetch origin :bar

//Git Pull的参数,与fetch类似,相当于fetch加merge,不仅更新了相应的<place>远程分支,还同时合并到当前<HEAD>分支。
git pull <remote> <place>

//Git Pull的参数,与fetch类似,相当于fetch加merge,不仅更新了<destination>分支为远程分支,还同时合并到当前<HEAD>分支。
git pull <remote> <source>:<destination>

相关文章

  • LearningGitBranch

    地址 在线学习Git 记录 基础篇 高级篇 移动提交记录 杂项 高级 Push & Pull - 远程仓库 关于o...

网友评论

      本文标题:LearningGitBranch

      本文链接:https://www.haomeiwen.com/subject/ohqzxhtx.html