Matthew Note

Git Command Notes

基本概念

Git 是一个分布式的版本管理工具,不同于perforce的是,他每个人都有一个完整的版本库,这种结构及其像bitcoin的原理。

工作区 Workplace

即文件夹所在的位置

索引区 Index(stage)

git add 提交到的区域,可以理解为缓存区

版本库 Repository

git commit 提交到的区域,即为本地Repository。即.git文件夹

stash

与perforce中shelve的概念非常相似

基本应用

创建一个Repository

1
git init

添加文件到stage区

1
git add readme.md

提交到版本库

1
git commit -m “new file

查看现有branch的状态

1
git status

查看工作区中文件和版本库中区别

1
git diff readme.md

查看commit历史记录

1
2
3
git log
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit \\显示分支图

退回上一个版本

1
2
git reset --hard HEAD^
git reset --hard 3628164
  • 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
  • 当你用$ git reset –hard HEAD^回退到“add distributed”版本时,再想恢复到“append GPL”,就必须找到“append GPL”的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
1
2
3
4
5
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

丢弃工作区的修改

1
git checkout -- readme.md

注意:有无 “–” 是有区别的,没有表示切换branch

删除文件

1
2
git rm readme.md
git commit -m "remove file"

分支管理

git的分支与perforce的分支大不同,git的分支是基于类似于指针的方式来实现的,它是在创建不同的指针指向不同的commit版本

创建分支

1
git checkout -b dev

上面的命令建立了dev分支并切换到dev,等同于如下:

1
2
git branch dev
git checkout dev

切换分支

1
git checkout dev

查看分支

1
git branch

删除分支

1
git branch -d dev

合并分支

1
2
git checkou master
git merge dev

如果有冲突,git会标示在有冲突的文件中,按照如下格式

1
2
3
4
5
6
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

另外一种合并分支的方法是

1
git merge --no-ff -m "merge with no-ff" dev

这种方法的不同是 合并会是一个新的commit, 而之前的只是简单的把master指向dev

远程管理

查看远程库信息

1
git remote -v

推送分支

1
2
git push origin master
git push origin dev

获得分支

1
2
git branch --set-upstream dev origin/dev \\第一次的时候需要关联本地和远程的分支
git pull

在本地创建和远程分支对应的分支

1
git checkout -b branch-name origin/branch-name

标签

添加标签

在某个分支上执行

1
2
git tag v1.0
git tag v1.0 6224799 \\commit id

查看标签

1
git show v1.0

删除标签

1
git tag -d v0.1

reset 某个文件

  1. 首先查看该文件的历史版本信息:git log Default@2x.png
  2. 记录下需要恢复的commit版本号:如 9aa51d89799716aa68cff3f30c26f8815408e926
  3. 恢复该文件:git reset 9aa51d89799716aa68cff3f30c26f8815408e926 Default@2x.png
  4. 提交git:git commit -m “revert old file”