We apologize that the translated content is not provided to this page.
Git
简介
Version Control System 版本控制系统
特点
- Track history copies 保留历史记录、文件(类似snapshot-快照,也可理解为增量备份?)
- Client/Server 既可作为服务器也可作为客户端
无版本控制时的原始操作
diff [file1] [file2] > [diff_file] #生产diff文件,包括文件的所有改动
patch [file] < [diff_file] #通过diff文件,对原始文件进行修改、打补丁
Git Workflow
graph LR;
A[Directory]--git init-->B[Working tree]
B[Working tree]--git add-->C[Staging area]
C[Staging area]--git commit-->D[Git directory]
B[Working tree]--git commit -a-->D[Git directory]
常用操作
You don't need to remember all until you use it.
git config #修改git配置
git init #初始化git文件夹
git add [file] #从untracked、unstaged (working tree)添加文件至staging area
git commit #改动说明,将staging area文件添加至git directory
git log #查看过去的commits
git commit
- 第一行简要写出改动
- 之后可用段落写出相应详细改动
git commit -a
:跳过git add
(只针对staging area,不包括untracked的新文件)git commit -m
:单行注释,用于小改动
Commit message规范
- Linux kernel documentation
- Commit Message Style Guide For Git
- 5 Useful Tips For A Better Commit Message
git log
git log -p
:显示patch,同diff -u
Rollback
git revert
- revert为重做版本1的行为,并commit为版本4
graph LR;
A[版本1]-->B[版本2]
B[版本2]-->C[版本3]
C[版本3]--git revert-->D[版本4]
C[版本3]--git revert---A[版本1]
git reset
- reset为抛弃版本1后的所有版本,回退为版本1
graph LR;
A[版本1]-->B[版本2]
B[版本2]-->C[版本3]
C[版本3]-->D[版本4]
D[版本4]--git reset-->A[版本1]
Merge & Rebase
master在branch1创建后有更新的情况时
graph LR;
A[版本1]-->B[版本2]
B[版本2]--master-->C[版本3]
B[版本2]--branch1-->D[版本3]
Merge
使用merge时,进行three-way-merge
branch1的版本3的祖先为master版本2
graph LR;
A[版本1]-->B[版本2]
B[版本2]-->C[版本3]
C[版本3]--master-->E[Merge Commit]
B[版本2]--branch1-->D[版本3]
D[版本3]--branch1-->E[Merge Commit]
Rebase
使用rebase时,进行fast-forwarding
将原本branch1版本3的祖先,从master的版本2,变为master的版本3(即在branch1版本3执行了master版本3的commit),branch1版本3的commitID会改变
graph LR;
A[版本1]-->B[版本2]
B[版本2]--master-->C[版本3]
B[版本2]--原branch1的ancestor-->D[版本3]
C[版本3]--新branch1的ancestor-->D[版本3]