地址
在线学习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>
网友评论