0%

#4 Git程序员基本篇

是日,手痒痒,制作之事与程序员 Git ,竟命行乃真好,言无多,盘也

基本操作

初始化

1
git init

添加文件到暂存区

1
2
git add .
.:全部文件
1
2
git add <file0> <file1> ...
单独添加文件

忽略文件

在工作区新建.gitignore 文件,写法如下:

1
2
3
4
#忽略文件集	注释
*.log log结尾的所有文件
test.py test.py这一个文件
vendor/ vendor目录

文件状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
git status



Untracked:
未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.

Unmodify:
文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改,
而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件

Modified:
文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态,
使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改

Staged:
暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态.
执行git reset HEAD filename取消暂存, 文件状态为Modified

Git 状态 untracked 和 not staged的区别
1)untrack 表示是新文件,没有被add过,是为跟踪的意思。
2)not staged 表示add过的文件,即跟踪文件,再次修改没有add,就是没有暂存的意思

提交暂存区文件到本地仓库

1
git commit -m '备注'

提交本地仓库文件到远程仓库

1
2
3
4
5
6
git romote add origin git@github.com:user/project.git

git push -u origin master
-u:第一次推送时加上,将本地master分支和远程master分支关联起来

git push origin master 除第一次外的简化命令

将远程仓库克隆到本地

1
git clone git@github.com:user/project.git

从远程仓库更新本地仓库

1
2
git pull origin master:master
master:master:第一个master是远程仓库分支,第二个master是本地仓库分支

进阶操作

查看文件具体更改

1
2
3
4
5
6
git diff README.md			工作区的文件和暂存区的此文件对比

git diff –cached README.md 暂存区的文件和本地仓库的此文件对比

git diff HEAD -- README.md 工作区的嗯键和本地仓库的此文件对比
显示格式为标准的Unix通用diff格式

提交历史记录

1
2
git log --graph
--graph:图形化树状分支,更加直观

命令历史记录

1
git reflog

丢弃工作区修改

1
git restore README.md

丢弃暂存区添加

1
git restore --staged README.md

版本回退

1
2
3
4
5
6
7
git reset --hard HEAD^		回退到上一个版本

git reset --hard HEAD^^ 回退到上两个版本

git reset --hard HEAD~100 回退到上100个版本

git reset --hard commit_id 回到到版本号为commit_id的版本
1
2
3
4
5
6
7
8
9
┌────┐							┌────┐
│HEAD│ -----------> │HEAD│
└────┘ └────┘
│ │
└──> ○ append GPL │ ○ append GPL
│ │ │
○ add distributed └──> ○ add distributed
│ │
○ wrote a readme file ○ wrote a readme file

参考资料

[1] Git忽略提交规则 - .gitignore配置运维总结,博客园
[2] git diff 与 git diff --cached与git diff HEAD -- file,博客园
[3] 版本回退,廖雪峰博客