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 <[email protected]>
| Date:   Sat Feb 20 21:37:50 2021 +0800
| 
|     Create 2020-02-20-What-is-CI.md
| 
* commit 47477354e39667a72365afeca9fd8dff5f4c1b93
| Author: Feng Zhang <[email protected]>
| Date:   Sat Feb 20 18:01:59 2021 +0800
| 
|     Update 2020-02-20-build-versions.md
| 
* commit d0d089fdf71fe9e2ada41d377e1ce961c48d7b55
| Author: Feng Zhang <[email protected]>
| 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

暂存,和弹出暂存