Git学习笔记
Posted 蓉城·飞将
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git学习笔记相关的知识,希望对你有一定的参考价值。
简介:Git是目前世界上最先进的分布式版本控制系统(没有之一)。
创始人:林纳斯·托瓦兹(Linus Torvalds)(传奇人物,linux创始人,为了方便管理linux的代码,两周内自己用C写出了Git,一个月时Linux系统的源码已经由Git管理了)
集中式vs分布式:
集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。
分布式版本控制系统每个人的电脑上都是一个完整的版本库,在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
Git安装(Windows):
从Git官网下载:https://git-scm.com/downloads,然后按照默认选项安装即可。
安装完后需要配置:
$ git config --global user.name "Your Name" $ git config --global user.email "email@example.com"
注意:用了global参数,表示你这台机器上所有的Git仓库都会使用这个配置。
创建版本库:
初始化git仓库:git init
添加文件:git add <file>
提交修改:git commit -m "xxx"
时光穿梭机:
查看是否有文件被修改:git status
查看修改的内容:git diff
版本回退:
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
查看提交历史:git log
查看命令历史(用于重返回退前版本):git reflog
工作区与暂存区:
工作区(Working Directory):电脑里能看到的目录
版本库(Repository):工作区中的隐藏目录 .git(不算工作区),其中包含暂存区(stage或index),还有自动创建的分支master,以及指向master的指针HEAD。
把文件往git版本库添加时的两步:
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
管理“修改”:
为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件。
撤销修改:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
删除文件:
命令git rm file用于删除文件
远程仓库:
第1步:GitHub注册:https://github.com/
第2步:创建ssh key:ssh-keygen -t rsa -C "youremail@example.com"
第3步:登陆GitHub,打开“Account settings”,“SSH Keys”页面,在Key文本框里粘贴id_rsa.pub文件的内容。
GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
添加远程库:
已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程关联:git remote add origin git@github.com:username/Project.git
第一次推送:git push -u origin master
第一次推送时加上-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
正常推送:git push origin master
从远程库克隆:
我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆。
git clone git@github.com:username/Project.git
分支管理:
创建与合并分支:
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突:
冲突是两个已经提交的分支的相同文件相同位置的的不同操作进行了合并。为了尽量避免冲突需要养成修改文件前先merge master(或其他待提交的分支)到当前分支。
<<<<<<< HEAD
Creating a new branch is quick simple. ======
CreatinganewbranchisquickANDsimple.
>>>>>> feature1
解决办法:仔细对比取并集,尽量把所有不同的文件保留,共同的只留一份
另外用git log --graph命令可以看到分支合并图
分支管理策略:
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
Bug分支:
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
Feature分支:
1、创建feature分支:git checkout -b feature-vulcan
2、切回dev准备合并:git checkout dev
3.1、合并然后删除:git merge <name> ;git branch -d <name>
3.2、删掉功能:git branch -d feature-vulcan
多人协作:
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。
标签管理:
创建标签:
- 命令git tag <name>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
- git tag -a <tagname> -m "blablabla..."可以指定标签信息;
- git tag -s <tagname> -m "blablabla..."可以用PGP签名标签;
- 命令git tag可以查看所有标签。
操作标签:
- 命令git push origin <tagname>可以推送一个本地标签;
- 命令git push origin --tags可以推送全部未推送过的本地标签;
- 命令git tag -d <tagname>可以删除一个本地标签;
- 命令git push origin :refs/tags/<tagname>可以删除一个远程标签。
以上是关于Git学习笔记的主要内容,如果未能解决你的问题,请参考以下文章