README
学习 git 相关材料和笔记
git 教程
基本命令
1 | # 打开 git GUI 界面 |
diff
原始文件用 - 表示,目标文件用 + 表示1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 简单查看比较,前者原始文件,后者为目标文件
$ diff <file1-name> <file2-name>
# 逐行查看比较
$ diff -u <file1-name> <file2-name>
# 比较暂存区和工作区的差别,暂存区为原始文件,工作区为目标文件
$ git diff
# 比较最新提交版本和工作区的差别,提交版本为原始文件,工作区为目标文件
$ git diff HEAD
$ git diff 54djf # 换成 commit id 表示某次提交与工作区的差别
# 比较最新提交版本与暂存区的差别,提交版本为原始文件,暂存区为目标文件
$ git diff --cached
分支管理与 stash
HEAD 指向的是分支当前所处版本状态,master(分支名)指向当前所处分支
分支的最佳实践,通常来说分支有如下几种:
master 分支:最稳定的分支,生产系统分支,变化最少
test 分支:用于测试人员测试
develop 分支:变化最频繁,用于开发
hotfix 分支:线上系统出问题用于紧急修复的分支
git 合并原则:三方合并原则
只有一个提交人的提交是线性提交
当有两个人进行提交,则从原始提交点开始进行分叉出两个新的提交点,合并时将这两个提交点进行合并,则比原始提交点前进了两次提交
合并 dev 分支到 master 分支时,如果 master 分支的状态没有被更改过,那么这个合并是非常简单的. dev 分支的历史记录包含 master 分支所有的历史记录,所以通过把 master 分支的位置移动到 dev 的最新分支上,Git 就会合并.这样的合并被称为 fast-forward(快进)合并.
1 | # 创建并切换 dev 分支 |
标签管理
标签有两种:轻量级标签 (lightweight) 与带有附注的标签 (annotated)
tag 不随分支的切换而改变1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 创建一个轻量级标签
$ git tag v1.0
# 创建带有附注的标签
$ git tag -a v0.1 -m "version 0.1 released"
# 查看所有标签
$ git tag
# 查找标签
$ git tag -l 'v1.0' # 查找 v1.0 标签
$ git tag -l 'v*' # 查找 v 开头的标签(支持正则表达式)
# 给历史提交的 commit id 打标签
$ git log --pretty=oneline --abbrev-commit # 查看 commit id
$ git tag v0.9 6224937
# 删除标签
$ git tag -d v1.0 # 删除本地标签
# 查看标签信息
$ git show v0.9
# 用 PGP 签名标签
$ git tag -s <tagname> -m "blablabla..."
# 推送某个标签到远程
$ git push origin v1.0
# 一次性推送全部尚未推送到远程的本地标签
$ git push origin --tags
# 删除远程标签
$ git tag -d v0.9 # 删除本地
$ git push origin :refs/tags/v0.9 # 删除远程
远程仓库
push 推送
pull 拉取会执行合并 merge pull == fetch+merge
远程协作如遇同时修改一个文件,需要先进行 pull 操作,并在本地手动合并修改文件的冲突,然后才能执行 push 操作
1 | $ ssh-keygen -t rsa -C "youremail@example.com" |
gitignore
.gitignore 文件包含要忽略的文件名,这些文件将不纳入版本管理中
.gitignore 中的输入支持正则表达式1
2
3
4
5# 创建.gitignore 文件
$ vi .gitignore
# 查看.gitignore 文件
$ cat .gitignore
自定义 Git
1 | # 显示颜色,会让命令输出看起来更醒目 |
搭建 Git 服务器1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
231. 安装 git:
$ sudo apt-get install git
2. 创建一个 git 用户,用来运行 git 服务:
$ sudo adduser git
3. 创建证书登录:收集所有需要登录的用户的公钥,就是他们自己的 id_rsa.pub 文件,把所有公钥导入到 /home/git/.ssh/authorized_keys 文件里,一行一个
4. 初始化 Git 仓库:
# 选定一个目录作为 Git 仓库,假定是 /srv/sample.git,在 /srv 目录下输入命令
$ sudo git init --bare sample.git
# 把 owner 改为 git
$ sudo chown -R git:git sample.git
5. 禁用 shell 登录:
# 编辑 /etc/passwd 文件
git:x:1001:1001:,,,:/home/git:/bin/bash # 修改成下面的内容
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
6. 克隆远程仓库,在各自的电脑上运行:
$ git clone git@server:/srv/sample.git