git项目有三个阶段,工作区,暂存区,和git目录
git安装
yum install -y git
[root@server1 demo]# git init ##初始化仓库
初始化空的 Git 版本库于 /root/demo/.git/
[root@server1 demo]# ll -a
总用量 0
drwxr-xr-x 3 root root 18 3月 12 19:47 .
dr-xr-x---. 3 root root 163 3月 12 19:46 ..
drwxr-xr-x 7 root root 119 3月 12 19:47 .git ##这个目录用来保存信息
所有操作应该在demo这个目录中完成,因为需要加载.git目录中的信息。
编写一个文件,用来测试
[root@server1 demo]# vim readme.txt
hello world
编写完成我们查看状态,提示我们要使用add来进行提交
[root@server1 demo]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# readme.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
[root@server1 demo]# git status -s
?? readme.txt ##前面两个问号表示未添加到版本库中
创建的时候注意,git需要纯文本才可以使用。
[root@server1 demo]# git add readme.txt
添加之后文本会到暂停区中,下一步需要commit进行提交才可以到达目录中
[root@server1 demo]# git status -s
A readme.txt ##前面这个A表示在暂停区中
[root@server1 demo]# git commit -m "add readme.txt" ##进行提交操作,引号中表示添加的信息
*** Please tell me who you are.
Run ##这里会让你添加一个名字和邮箱
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@server1.(none)')
[root@server1 demo]# git config --global user.name "passyt" ##添加之后每次提交都会有记录之后进行审计操作
[root@server1 demo]# git config --global user.email "passyt@root.com"
每次提交完成后会将这些信息进行保存
[root@server1 ~]# cat .gitconfig
[user]
name = passyt
email = passyt@root.com
添加完成后再进行提交就不会报错了。
[root@server1 demo]# git commit -m "add readme.txt"
[master(根提交) 0d67823] add readme.txt
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
[root@server1 demo]# git status -s
这个时候再查看状态就发现什么都没有,因为已经完成,没有
当我们将刚才上传的文件内容进行修改
[root@server1 demo]# vim readme.txt
hello world
hello world
hello world
hello world
hello world
[root@server1 demo]# git status
# 位于分支 master
# 尚未暂存以备提交的变更:
# (使用 "git add <file>..." 更新要提交的内容)
# (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
# 修改: readme.txt
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
查看状态提示要么提交,要么撤销修改。如果使用撤销命令,那么文件就会变成最开始提交时的状态。
[root@server1 demo]# git status -s ##再查看状态
M readme.txt ##仔细看前面M的状态以及位置
[root@server1 demo]# git add readme.txt ##添加
[root@server1 demo]# git status -s
M readme.txt ##和上面的位置做对比
前面的位置表示没有在暂存区,后者表示已经到达暂存区。
如果说我们再次进行修改,以及查看状态
[root@server1 demo]# git status -s
MM readme.txt ##前面的M变成了两个,
到了这个状态我们需要再次进行添加才可以,添加完成才可以进行提交操作
[root@server1 demo]# git add readme.txt
[root@server1 demo]# git status -s
M readme.txt
[root@server1 demo]# git commit -m "change readme.txt"
[master cbcb8af] change readme.txt
1 file changed, 3 insertions(+)
忽略文件
在正常生产环境中会产生很多临时文件或者隐藏文件,但是仓库也会将这些文件添加进来,这些文件我们不需要,所以我们就要将这些文件进行忽略。
[root@server1 demo]# touch .a
[root@server1 demo]# git status -s
?? .a
如何忽略
创建一个隐藏文件.gitignore
[root@server1 demo]# vim .gitignore
.* ##所有隐藏文件都进行忽略
这个时候再查看状态,这些隐藏文件就不会进行添加。
查看修改
我们将readme文件进行一些修改,这些修改如何直观的查看,使用diff
[root@server1 demo]# git diff
diff --git a/readme.txt b/readme.txt
index 1ecd5ed..1b11f8b 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,3 @@
hello world
hello world
hello world
-hello world ##这里我们可以看到删除了一行
移除文件
我们可以直接在目录中将我们编写的文件进行删除,但是这删除的只是文件,而且这个文件依然保存在暂存区。
[root@server1 demo]# rm -rf readme.txt
[root@server1 demo]# git diff
diff --git a/readme.txt b/readme.txt
deleted file mode 100644
index 1b11f8b..0000000
--- a/readme.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-hello world
-hello world
-hello world
[root@server1 demo]# git status -s
D readme.txt
如果后悔了可以使用checkout进行还原到上一次提交的状态。如果真要删除那么要使用git再删除一遍。之后再进行提交才可以。
[root@server1 demo]# git rm readme.txt
rm 'readme.txt'
[root@server1 demo]# git status -s
D readme.txt
但是即使在使用git命令删除后依然可以进行撤销,使文件从暂存区退回工作区,在次撤销从工作区撤销文件就恢复了。
[root@server1 demo]# git reset HEAD readme.txt
重置后撤出暂存区的变更:
D readme.txt
[root@server1 demo]# ls
[root@server1 demo]# git status -s
D readme.txt
[root@server1 demo]# git checkout -- readme.txt
[root@server1 demo]# ls
readme.txt
最后进行提交才能真正的删除
[root@server1 demo]# git commit -m "delete"
[master 65e1194] delete
1 file changed, 3 deletions(-)
delete mode 100644 readme.txt
但是如果已经删除完成并且进行提交后还能撤销吗?答案时可以的,但是首先我们要查看我们都干了些什么。
[root@server1 demo]# git log --pretty=oneline ##查看记录
65e11945d33a4bcdf5ae8f041bee7fea33db13a5 delete
72b4d316b9a7bdfb1025f38d9f7bc617ec7412e7 v1
cbcb8af586d79899b3c7b605b4afadee5c3bb0ec change readme.txt
0d67823884f6a9002d0faac8faf6cb179103541e add readme.txt
[root@server1 demo]# git reflog
65e1194 HEAD@{0}: commit: delete
72b4d31 HEAD@{1}: commit: v1
cbcb8af HEAD@{2}: commit: change readme.txt
0d67823 HEAD@{3}: commit (initial): add readme.txt
[root@server1 demo]# git reset --hard 72b4d31 ##返回哪里,哪个版本
HEAD 现在位于 72b4d31 v1
[root@server1 demo]# ls
readme.txt
[root@server1 demo]# cat readme.txt
hello world
hello world
hello world
这样就直接将文件进行了恢复