1. 安装和初始化设置
git config --global name "your name"
git config --global email "your email"
2.创建版本库repository
windows上打开git bash
cd 目录
git init # 生成一个空的repository版本库。此时目录中,已有文件,尚未加入版本库中,通过git add .添加到暂存区,git commit -m "提交信息",将文件添加入版本库中。
3.版本回退
git reset --hard head^^^ # 回退三次
git reset --hard 版本号id # 回退到具体版本号
4.查看历史
git log # 查看commit提交历史
git reflog # 查看所有命令历史
5. 工作区,暂存区,版本库,提交修改。
git add file # 将文件的修改信息,从工作区保存到暂存区中。
git commit -m "备注信息" # 将暂存区中数据,保存到版本库中。
6. 撤销修改
git checkout -- file # 将工作区资料,撤销修改到最近一次git add或者git commit的状态。注意checkout命令也是分支管理命令,所以--是必须的参数。
PS:
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
7.删除文件
不执行git rm file命令,则不会将文件从版本库中删除,你仍然可用git checkout -- file命令恢复文件。
8.远程仓库管理
1)添加远程仓库
git remote add origin 你的远程仓库地址 # 一般来说,origin是Git默认叫法,一眼就知道是远程仓库,方便后续使用。但是你也可以改名。
ps:理解法,git remote远程仓库 add 一个叫做origin的远程仓库,地址为xxxx。
2)从远程仓库克隆到本地
git clone 你的远程仓库地址
ps:目前常见github管理平台,常见的远程仓库地址的写法有两种,一种是git@github.com:用户名/你的仓库名.git;另一种是https的写法。两种均可,一般推荐git,因为使用ssh协议,一来传输速度更快,二来安全性增加。
3)推送远程仓库
git push origin master
4)拉取远程仓库更新
git pull orgin master
9.分支管理
首先理解一张图,三个概念。head指针,master和dev分支指针, 版本内容。
head 指向 分支指针,再指向具体版本内容。
1)创建,切换,删除分支。
git branch 分支 # 创建分支
git checkout 分支 # 切换分支,即head指针切换指向另一分支指针。
git checkout -b 分支 # 创建+切换分支的合并命令。
2)查看分支
git branch; # 查看分支。如下图所示,*表示当前分支
$ git branch
master
* test
3)合并分支
git merge 分支名; # 将分支合并到当前所在分支上。
4)删除分支
git branch -d 分支名
5)解决分支冲突
首先,merge:
git branch; # 查看当前分支
git merge 你想合并的分支 # 合并到当前分支
接着,修改工作区文件内容。例如test.txt文件中出现:
<<<<<<< HEAD
a master change;
=======
It is a test;
>>>>>>> test
最后,提交改变,解决冲突。
git add test.txt # 手工修改冲突,并提交暂存区
git commit -m "conflict fixed" # 解决冲突。
git log --graph; # 查看分支图形记录。
git log --graph --pretty=oneline --abbrev-commit; # 优化图示法
6)分支合并策略
git merge dev # 默认采用fast-forward模式。
* ba1daa2 (head->master,dev) add merge
* bdb7f79 conflict fixed
git merge --no-ff -m "merge with no-ff" dev # 指定采用no-off模式。
* bdb7f79 (head->master) add with no-off
|\
| * b2f2d77 (dev) add merge
|/
* bdb7f79 conflict fixed
ps:可以看出,fast-forward模式,无法看出分支信息,在commit(conflict fixed)之后,只有一个commit提交信息;而no-off模式,则可以看出分支信息,并且多了一次commit提交信息。
7)团队协作与分支管理策略
git remote; # 查看所有远程仓库信息。
git remote -v; # 查看所有远程仓库更详细的信息。
git push origin master; # 推送master分支
git push origin dev; # 推送dev分支。
git checkout -b dev origin/dev
分支管理策略:
master作为稳定版本,仅用于发布新版本。(ps:git tag命令)
dev,作为开发版,所有人员在此版本上协作,每个人都有自己的本地dev分支,不时的合并到远程dev分支就对了。
feature分支:每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。
bug分支:
注意bug分支是在哪里修复,例如修复到master分支上,还是修复到dev分支上,最后稳定版才发布。
ps:关于bug分支,如果你接到bug修复任务的同时,还在处理dev开发任务到一半,提交不合适,建议用git stash命令保存修改。
请记住以下四个stash命令。
git stash; # 保存分支的工作区状态,保存在栈中
git stash list; # 显示栈中所有信息
git stash pop; # 恢复最后入栈的工作区状态
git stash apply stash@{0}; # 恢复指定的工作区状态。
10.标签管理与作用
1)新建标签
git tag 标签名; # 在当前分支的最近一次提交commit打标签
git tag 标签名 指定的commitid; # 在指定的提交commitid上打标签。
2)查看标签
git tag;# 查看所有标签
git tag show [tagname]; # 查看某个标签的详细信息。
git tag -a 标签名 -m "备注信息" [commitid]; # 给某个标签附加备注信息。
3)删除标签
git tag -d 标签名;
4)标签的远程同步
git push origin <tagname>; # 同步某个标签
git push origin --tags; # 同步所有标签
git push origin :refs/tag/tagname; # 同步删除一个标签。
11.其他
1)忽略文件
请使用.gitignore文件来忽略,更多细节请baidu,较为少用的东西。
2)搭建git服务器
1.首先安装git,
sudo apt-get install git
2.创建git用户,并设定权限,
sudo adduser git
vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
3.收集证书
收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
4.创建裸仓库
先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令:
git init --bare sample.git
sudo chown -R git:git sample.git
5.同步使用仓库
git clone git@你的私有仓库ip地址:/srv/sample.git
接着你懂得用的。