GIT入门
VC(version control system)是什么
一种追踪源代码或者其他类型文件修改的工具。从名字上可以看出,这工具还可以追踪修改的历史。
VC system会给它管理的文件和文件夹照快照,所以它会保存整个项目的状态。并且附加一些额外信息,如谁对这次修改负责、修改时间等。
Git Model
blob在Git中,是file的同义词。
tree在Git中,是folder的同义词。
commit在Git中,是快照的同义词。
type blob = array <byte>
type tree = map <string, tree | blob>
type commit = struct {
parents array <commit>
author : string
message : string
snapshot : tree
}
# blob, tree, commit在Git中都是object。
type object = blob | tree | commit
objects = map <string, object>
def store(o) {
id = sha1(o);
object[id] = o;
}
def load(id) {
return object[id];
}
一些Git命令
git init
git init
会让一个文件夹变成Git管理的文件夹,git init
代表git initialize。实际上这个命令会在当前目录创建一个.git隐藏文件夹。
git status
git status
会展示现在的状态。
git add
Git有staging区域的概念,文件被修改后,需要先git add
到一个区域,代表下次快照会包括这个文件。
git add ./
会添加所有修改的文件供下次提交。
git commit
git commit
是给当前状态照快照。
git log
是展示现在状态的可视化图形。
例子:git log --all -graph --decorate
、(git log --all -graph --decorate --oneline
)
运行结果:
* commit baa9a9c197f20d458074bef2cefc6815bcb4bb75 (HEAD -> master, origin/master)
| Author: Feng Zhang <feng.zhang@compass.com>
| Date: Sat Feb 20 21:37:50 2021 +0800
|
| Create 2020-02-20-What-is-CI.md
|
* commit 47477354e39667a72365afeca9fd8dff5f4c1b93
| Author: Feng Zhang <feng.zhang@compass.com>
| Date: Sat Feb 20 18:01:59 2021 +0800
|
| Update 2020-02-20-build-versions.md
|
* commit d0d089fdf71fe9e2ada41d377e1ce961c48d7b55
| Author: Feng Zhang <feng.zhang@compass.com>
| Date: Sat Feb 20 17:57:19 2021 +0800
|
| Update 2020-02-20-build-versions.md
|
git checkout
git checkout
会修改当前HEAD所在位置。
git checkout commitID
会将HEAD修改到commitID的位置。
git checkout master
会将HEAD修改到master的位置。
git diff
git diff filename
展示上次照快照之后,该文件的修改。
git diff from-commit-id to-commit-id filename
展示从from-commit-id到to-commit-id,filename的修改。
branch and merge
git checkout -b branchname
git checkout -b branchname
创建新branch。
新branch最开始和master的head指向的commitID一致。
git checkout branchname
git checkout branchname
切换branch。
git merge branchname
git merge branchname
会把branchname merge到当前分支
git blame
查看每行是哪个commitID修改的。
git show
查看某个commitId的信息
git stash | git stash pop
暂存,和弹出暂存