forked from xianyunyh/PHP-Interview
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Git.md
214 lines (151 loc) · 5.13 KB
/
Git.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# Git
- 创建git仓库
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的
```
git init
```
- 工作区状态
```
git status //查看状态
git diff //比较差异
```
- 版本回退
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭
```
git log //查看提交的记录
git reflog //查看命令操作的记录
git reset --hard HEAD//回退到Head的工作区
```
- 工作区、暂存区
工作区就是当前操作的目录。当你使用git add的时候就是把文件加到暂存区。commit之后就是把暂存区的文件提交到分支中
版本库记录着差异。
![image](https://www.liaoxuefeng.com/files/attachments/001384907720458e56751df1c474485b697575073c40ae9000/0)
- 撤销修改
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
用命令
```
git reset HEAD file
```
可以把暂存区的修改撤销掉(unstage),重新放回工作区。使用 HEAD表示最新的状态
- 删除文件
使用git rm file 可以删除版本库中的文件
```
git rm read.txt
git checkout -- read.txt //从版本库中恢复
```
- 远程仓库
添加远程仓库
origin 是仓库名字。是git的默认的
```
git remote add origin 仓库地址
git remote -v 查看远程仓库
git push -u origin master //将本地master和orgin分支关联。
git clone 仓库地址 //clone 一个远程仓库到本地
git checkout -b branch-name origin/branch-name,//本地和远程分支的名称最好一致
git branch --set-upstream branch-name origin/branch-name //建立本地分支和远程分支的关联,
git pull orgin master //从远程分支抓取
```
## git分支
master 是git 默认的分支,也叫主分支。每一次提交在分支上形成了一个时间线。HEAD指向该分支
![image](https://www.liaoxuefeng.com/files/attachments/001384908811773187a597e2d844eefb11f5cf5d56135ca000/0)
- 创建分支
```
git branch dev //创建分支
git checkout dev //切换分支
git branch //命令会列出所有分支
git checkout -b dev //创建并切换到dev分支
```
HEAD指针指向了dev
![image](https://www.liaoxuefeng.com/files/attachments/00138490883510324231a837e5d4aee844d3e4692ba50f5000/0)
- 合并分支
合并某分支到当前分支:git merge <name>
```
git checkout master
git merge dev
```
- 删除分支
```
git branch -d dev
git branch -D <name> //强行删除
```
## 工作区暂存
将工作区暂时保存起来 不提交到暂存区。
```
git stash //保存工作区
git stash list //查看保存的工作区
git stash pop
git stash apply //恢复保存的工作区
git stach drop //删除保存的工作区
```
## tag标签
```
git tag v1.0 //打标签
git tag // 列出所有的标签
git tag commit_id //给特定的commit_id打标签
git tag -a v1.0 -m "tag1" //打带说明的标签
```
- 操作标签
- 删除标签
```
git tag -d v1.0
```
- 推送标签到远程分支
```
git push orgin v1.0
git push origin --tags// 推送所有的标签到远程分支
git push origin :refs/tags/v0.9 //删除远程分支的标签
```
### 配置git
初次使用 需要配置自己的信息,
```
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
```
- 配置忽略文件
.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
忽略文件的原则是:
1. 忽略操作系统自动生成的文件,比如缩略图等;
2. 、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件
3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
- 设置别名
别名就是把一些复杂的命令简化 类似svn co等之类的
```shell
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
```
- 当前项目配置
每个仓库的Git配置文件都放在.git/config文件中:
```ini
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = git@github.com:xianyunyh/PHP-Interview
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[alias]
last = log -1
```
当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中
```ini
[alias]
co = checkout
ci = commit
br = branch
st = status
[user]
name = Your Name
email = your@email.com
```