-
GIT基础
GIT是一个分布式版本管理系统,速度快,适合大规模,跨地区多人协同开。SVN是一个集中式版本管理系统。
(1)GIT生态
GIT分布式版本管理系统
Gitlab git私库解决方案
Github git公有库解决方案
(2)Git安装
Centos:
yum install -y git
Ubuntu:
apt-get install git
Windows安装git bash
Linux编译安装
注意不要使用git 1.8以下版本,推荐使用2.7版本
①编译安装git
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
|
[root@linux-node1 ~]
# yum install -y epel-release
安装依赖包:
[root@linux-node1 ~]
# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
[root@linux-node1 ~]
# wget https://github.com/git/git/archive/v2.7.4.zip
[root@linux-node1 ~]
# yum install -y unzip
[root@linux-node1 ~]
# unzip git-v2.7.4.zip
[root@linux-node1 ~]
# cd git-2.7.4
[root@linux-node1 git-2.7.4]
# make prefix=/usr/local/git all
[root@linux-node1 git-2.7.4]
# make prefix=/usr/local/git install
[root@linux-node1 git-2.7.4]
# rm -rf /usr/bin/git
[root@linux-node1 git-2.7.4]
# ln -s /usr/local/git/bin/git /usr/bin/git
[root@linux-node1 git-2.7.4]
# git --version
git version 2.7.4
②初始化仓库
[root@linux-node1 ~]
# mkdir test
[root@linux-node1 ~]
# cd test
[root@linux-node1
test
]
# git init #将test目录初始化仓库
[root@linux-node1
test
]
# git config --global user.name"*****"
[root@linux-node1
test
]
# git config --global user.email *******@qq.com
四个区域:
远程仓库<-->本地仓库<-->暂存区域<-->工作目录
四种状态
Untracked、Unmodified、Modified、Staged
Untracked(工作目录)-->git add -->Staged(暂存区)-->git commit版本-->Unmodified(本地仓库)-->Edit
file
-->Modified-->Stage the
file
-->Staged
③常用命令:
git add 加入暂存
git status 查看状态
git status -s 状态概览
git
diff
尚未暂存的文件
git
diff
--staged 暂存区文件
git commit 提交更新
git reset 回滚
git
rm
从版本库中移除
git
rm
--cached README 从暂存区中移除
git
mv
相当于
mv
git
rm
git add 三个命令
使用演示:
[root@linux-node1
test
]
# touch index.html ==>创建文件
[root@linux-node1
test
]
# vim index.html
[root@linux-node1
test
]
# git status ==>此时文件处于工作目录中
位于分支 master
初始提交
未跟踪的文件:
(使用
"git add <文件>..."
以包含要提交的内容)
index.html
提交为空,但是存在尚未跟踪的文件(使用
"git add"
建立跟踪)
[root@linux-node1
test
]
# git add index.html ==>加入代码库
[root@linux-node1
test
]
# git status ==>此时文件处于暂存区
位于分支 master
初始提交
要提交的变更:
(使用
"git rm --cached <文件>..."
以取消暂存)
新文件: index.html
[root@linux-node1
test
]
# git commit -m "first commit" ==>提交到本地仓库
[master(根提交) c6bc04f] first commit
1
file
changed, 3 insertions(+)
create mode 100644 index.html
[root@linux-node1
test
]
# git status
位于分支 master
无文件要提交,干净的工作区
[root@linux-node1
test
]
# git log
commit c6bc04f90d4ef442e2c4d5bc788b21de239332da ==>回滚需要的
id
Author: ****** <******@qq.com>
Date: Fri Dec 8 22:37:40 2017 +0800
first commit
[root@linux-node1
test
]
# touch pay.html
[root@linux-node1
test
]
# vim pay.html
[root@linux-node1
test
]
# git add pay.html
[root@linux-node1
test
]
# git status
On branch master
Changes to be committed:
(use
"git reset HEAD <file>..."
to unstage)
new
file
: pay.html
[root@linux-node1
test
]
# touch news.html
[root@linux-node1
test
]
# echo "123" > news.html
[root@linux-node1
test
]
# git status
On branch master
Changes to be committed:
(use
"git reset HEAD <file>..."
to unstage)
new
file
: pay.html
Untracked files:
(use
"git add <file>..."
to include
in
what will be committed)
news.html
[root@linux-node1
test
]
# git add news.html
[root@linux-node1
test
]
# git status
On branch master
Changes to be committed:
(use
"git reset HEAD <file>..."
to unstage)
new
file
: news.html
new
file
: pay.html
[root@linux-node1
test
]
# git rm --cached pay.html #将pay.html从暂存区移除
rm
'pay.html'
[root@linux-node1
test
]
# git status
On branch master
Changes to be committed:
(use
"git reset HEAD <file>..."
to unstage)
new
file
: news.html
Untracked files:
(use
"git add <file>..."
to include
in
what will be committed)
pay.html
[root@linux-node1
test
]
# git commit -m "news"
[master d83603a] news
1
file
changed, 1 insertion(+)
create mode 100644 news.html
[root@linux-node1
test
]
# git status
On branch master
Untracked files:
(use
"git add <file>..."
to include
in
what will be committed)
pay.html
nothing added to commit but untracked files present (use
"git add"
to track)
[root@linux-node1
test
]
# git log
commit d83603a56b8926630d31b46898e4b6d69293d946
Author:********
Date: Fri Dec 8 22:48:37 2017 +0800
news
commit c6bc04f90d4ef442e2c4d5bc788b21de239332da
Author: *****************
Date: Fri Dec 8 22:37:40 2017 +0800
first commit
[root@linux-node1
test
]
# echo "66666" >> pay.html
[root@linux-node1
test
]
# git status
On branch master
Untracked files:
(use
"git add <file>..."
to include
in
what will be committed)
pay.html
nothing added to commit but untracked files present (use
"git add"
to track)
[root@linux-node1
test
]
# git add pay.html
[root@linux-node1
test
]
# git status
On branch master
Changes to be committed:
(use
"git reset HEAD <file>..."
to unstage)
new
file
: pay.html
[root@linux-node1
test
]
# git commit -m "pay modelue"
[master e55a302] pay modelue
1
file
changed, 2 insertions(+)
create mode 100644 pay.html
[root@linux-node1
test
]
# git status
On branch master
nothing to commit, working directory clean
[root@linux-node1
test
]
# git log
commit e55a302e11d967fd25eac1cce8b6c7bed732019b
Author:******************
Date: Fri Dec 8 22:49:57 2017 +0800
pay modelue
commit d83603a56b8926630d31b46898e4b6d69293d946
Author: ******************
Date: Fri Dec 8 22:48:37 2017 +0800
news
commit c6bc04f90d4ef442e2c4d5bc788b21de239332da
Author: ******************
Date: Fri Dec 8 22:37:40 2017 +0800
first commit
|
2.分支管理
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
|
[root@linux-node1
test
]
# git status
On branch master
nothing to commit, working directory clean
建分支,开发新功能是不能在master分支上开发
[root@linux-node1
test
]
# git branch about #创建分支
[root@linux-node1
test
]
# git status
On branch master
nothing to commit, working directory clean
[root@linux-node1
test
]
# git checkout about #切换分支
Switched to branch
'about'
[root@linux-node1
test
]
# git status
On branch about
nothing to commit, working directory clean
[root@linux-node1
test
]
# git log #创建的分支是在master分支当前的状态进行创建的。所以在about分支上也会有master的记录
commit e55a302e11d967fd25eac1cce8b6c7bed732019b
Author: ************
Date: Fri Dec 8 22:49:57 2017 +0800
pay modelue
commit d83603a56b8926630d31b46898e4b6d69293d946
Author: ************
Date: Fri Dec 8 22:48:37 2017 +0800
news
commit c6bc04f90d4ef442e2c4d5bc788b21de239332da
Author: ************
Date: Fri Dec 8 22:37:40 2017 +0800
first commit
[root@linux-node1
test
]
# git branch
* about
master
[root@linux-node1
test
]
# touch about.html
[root@linux-node1
test
]
# echo "about us" >> about.html
[root@linux-node1
test
]
# git add .
[root@linux-node1
test
]
# git commit -m "about"
[about 08b200a] about
1
file
changed, 1 insertion(+)
create mode 100644 about.html
[root@linux-node1
test
]
# git log
[root@linux-node1
test
]
# git checkout master #切换到master分支
Switched to branch
'master'
[root@linux-node1
test
]
# git log
[root@linux-node1
test
]
# git checkout about #切换到about分支
[root@linux-node1
test
]
# echo "about2" > about2.html
[root@linux-node1
test
]
# git add .
[root@linux-node1
test
]
# git commit -m "about2"
[root@linux-node1
test
]
# git log
[root@linux-node1
test
]
# git checkout master
[root@linux-node1
test
]
# git log
[root@linux-node1
test
]
# git merged about #在master分支上合并about分支
[root@linux-node1
test
]
# git log
[root@linux-node1
test
]
# git branch test #创建test分支
[root@linux-node1
test
]
# git checkout test
[root@linux-node1
test
]
# touch "test" > test.html
[root@linux-node1
test
]
# git add .
[root@linux-node1
test
]
# git commit -m "test"
[root@linux-node1
test
]
# git checkout master
[root@linux-node1
test
]
# git branch --merged #查看已经合并的分支
[root@linux-node1
test
]
# git branch --no-merged #查看未合并的分支
分支命令
git branch例出分支
git branch -
v
git branch --merged查看哪些分支被合并
git branch --no-merged查看哪些分支未被合并
git branch -d testling删除分支
git checkout切换分支
git merged融合分支
|
本文转自 IT_外卖小哥 51CTO博客,原文链接:http://blog.51cto.com/jinlong/2052146