Git 是目前使用的较多的一种分布式版本控制系统。通过Git可以方便的对代码,文件等的版本进行控制处理,大大提升了开发过程中的便利度。
Git的安装方法可以自行百度,也可以参考这里(廖雪峰对于Git基础的介绍)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本地版本控制:
1、创建版本库
1)通过 mkdir 命令创建仓库,并通过 git init 对版本库进行初始化。
2)往git库中添加文件的方法主要有以下两步:
① 使用命令 git add <file>, 可以反复多次使用,添加多个文件
② 使用 git commit -m <message> 提交文件
2、文件版本控制
介绍文件版本控制的相关命令前,需要先介绍一些概念(下图,同样来自廖雪峰的Git教程):
工作区:创建的文件夹(仓库)
版本库:包括暂存区(stage)和 master 分支。.git的隐藏库,就是这里的版本库。(版本控制操作实现的基础)
1)通过 git status 命令可以掌握当前工作区的状态。
若 git status 提示文件有修改,通过 git diff <file>可以查看修改的内容。
2)版本回退
① 上图中的HEAD指向当前版本,通过命令 git reset --hard commit_id 在各个版本之间变换。
② git log 命令可以查看提交历史,即不同的版本。以便确定需要退回到那个版本。
③ git reflog 可以查看命令历史,以便确定要回到未来的哪个版本。
3)撤销修改
① git checkout -- file 直接放弃对工作区的修改。
② 修改的文件已经添加到暂存区,但此时想对其修改时,分两步执行:
第一步:git reset HEAD <file> ,将暂存区文件退回到工作区;
第二步:同①,放弃对工作区的修改
③ 已经提交(commit 操作),想要撤销本次提交时,具体操作参考版本回退。
4)文件删除
① rm <file> 命令删除对应的文件(工作区)。
② git rm <file> 命令从版本库中删除该文件。git commit -m <message> 确定提交删除之后的结果。
③ 如果发现①步删错了,此时若没有执行②(即,版本库中还存在对应的文件),可以通过命令 git checkout -- <file>还原文件。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
远程仓库:
本地数据对远程仓库进行初次关联之前需要进行以下处理:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa
和id_rsa.pub
这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。
如果一切顺利的话,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容:
1、添加远程库
在github新建仓库learngit,在本地仓库中通过命令:
git remote add origin git@github.com:zhangxiangchn/learngit.git
将本地仓库和远程仓库进行关联。这里zhangxiangchn是我的github的账户名,你需要替换成你自己的账户名称。
添加后,远程库的名字就是origin
,这是Git默认的叫法,也可以改成别的,但是origin
这个名字一看就知道是远程库。
关联之后,通过命令:
git push -u origin master
将本地仓库的内容推送到远程仓库。执行以上命令之后,远程库的命令和本地仓库的命令就是一样的了。之后,在本地提交的任何修改都可以通过命令:
git push origin master
将本地仓库内容和远程仓库进行同步。
2、从远程库进行克隆
通过以下命令将远程库的内容克隆到本地
git clone git@github.com:zhangxiangchn/learngit.git
或者以下命令
git clone https://github.com/zhangxiangchn/learngit.git
以上两种地址都可以对远程仓库的内容进行克隆。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
分支管理:
1、查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
2、合并分支出现冲突的时候,需要手动解决,然后提交。
冲突文件中,Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容。
命令 git log --graph 可以看到分支合并图。
3、通常,合并分支时,如果可能,Git会用 Fast forward
模式,但这种模式下,删除分支后,会丢掉分支信息。
命令
git merge --no-ff -m "merge with no-ff" dev
会禁用 Fast forward 模型,保留分支信息。-m参数表示新的提交的 message 。
4、BUG 处理
当手头工作没有完成时,先把工作现场 git stash
一下,然后去修复bug,修复后,再 git stash pop
,回到工作现场。
5、
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>
强行删除。
6、
1)查看远程库信息,使用 git remote -v
;
2)本地新建的分支如果不推送到远程,对其他人就是不可见的;
3)从本地推送分支,使用git push origin branch-name
,如果推送失败,先用git pull
抓取远程的新提交;
4)在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name
,本地和远程分支的名称最好一致;
5)建立本地分支和远程分支的关联,使用 git branch --set-upstream origin/branch-name branch-name
;
6)从远程抓取分支,使用git pull
,如果有冲突,要先处理冲突。