安装什么的可以看看廖雪峰git真心超赞!
写这个只是为了方便查看。。。郑重声明,鄙人没有任何商业目的!!!
请各位大佬勿喷!谢谢啦~O(∩_∩)O~
在建立完管理仓库之后:
$ git add 文件名(注意空格不能省略,这里最后说一次)
git commit -m "wrote a readme file"
[master (根提交) 19afd69] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100755 readme.txt
简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
可以多次add不同的文件,比如:
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
当没有东西的时候:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
无文件要提交,干净的工作区
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git diff
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100755
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git log
commit 7da253b8467595d9a6806c0ab9d93d80cdc8564a
Author: jiayoudangdang <[email protected]>
Date: Thu Feb 22 18:40:39 2018 +0800
append GPL
commit 1392e4df18da3c13cbffaf55454a95833dbdd9fe
Author: jiayoudangdang <[email protected]>
Date: Thu Feb 22 18:37:24 2018 +0800
add distributed
commit 19afd699827b84b0b6671103e55c25f1f274e680
Author: jiayoudangdang <[email protected]>
Date: Thu Feb 22 16:48:22 2018 +0800
wrote a readme file
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。
如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git log --pretty=oneline
7da253b8467595d9a6806c0ab9d93d80cdc8564a append GPL
1392e4df18da3c13cbffaf55454a95833dbdd9fe add distributed
19afd699827b84b0b6671103e55c25f1f274e680 wrote a readme file
看到的一大串类似3628164...882e1e0的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了。
每提交一个新版本,实际上Git就会把它们自动串成一条时间线。
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reset --hard HEAD^
HEAD 现在位于 1392e4d add distributed
然后你发现,后悔药吃错了。。。想在吃回来(⊙o⊙)…没问题!
只要上面的命令行窗口还没有被关掉,找到那个append GPL的commit id是3628164...,于是就可以指定回到未来的某个版本:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reset --hard 7da253b8467595d9a6806c0ab9d93d80cdc8564a
HEAD 现在位于 7da253b append GPL
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt Git is a distributed version control system.
Git is free software distributed under the GPL.
O(∩_∩)O回来啦~
查看某文档
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt
Git is a distributed version control system.
Git is free software.
Git的版本回退速度非常快,因为Git在内部有个指向当前版本的HEAD
指针,当你回退版本的时候,Git仅仅是把HEAD从指向append GPL
:
改为指向add distributed
:
然后顺便把工作区的文件更新了。所以你让HEAD
指向哪个版本号,你就把当前版本定位在哪。
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reflog
1392e4d HEAD@{0}: reset: moving to HEAD^
7da253b HEAD@{1}: reset: moving to 7da253b8467595d9a6806c0ab9d93d80cdc8564a
1392e4d HEAD@{2}: reset: moving to HEAD^
7da253b HEAD@{3}: commit: append GPL
1392e4d HEAD@{4}: commit: add distributed
19afd69 HEAD@{5}: commit (initial): wrote a readme file
恩,然后就可以按照之前的方法,回来~~!
如果不知道什么是master请看:传送门
以丢弃工作区的修改:(就是在库中的文件,没上传之前叫工作区)
改之前与改之后的对比:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# vim readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
Git tracks changes of files.
My stupid boss still prefers SVN.
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git checkout -- readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;添加到了暂存区,还没有提交到工作区~
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
fuck!!!!!!!!get out!get away!!
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git add readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改: readme.txt
恩已经添加到了暂存区
撤销:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git reset HEAD readme.txt
重置后取消暂存的变更:
M readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
fuck!!!!!!!!get out!get away!!
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
恩现在变成了没有到暂存区之前的模样了~
然后,丢弃在工作区的修改:
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git checkout -- readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat readme.txt
Git is a distributed version control system.
Git is free software.
Git has a mutable index called stage.
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# cat test.txt
就是一个实验!一会我要将它删除
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git add test.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git commit -m "add test.txt"
[master 7afe5a2] add test.txt
1 file changed, 1 insertion(+)
create mode 100644 test.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# rm test.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# ls
LICENSE.txt readme.txt
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# tree
.
├── LICENSE.txt
└── readme.txt
0 directories, 2 files
root@jiayoudangdang-HP-Pavilion-Notebook:/home/jiayoudangdang/learngit# git status
位于分支 master
尚未暂存以备提交的变更:
(使用 "git add/rm <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
删除: test.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
现在,文件就从版本库中被删除了。
$ git checkout -- test.txt
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
敬请期待!笔记2.0!!!感谢!!~O(∩_∩)O~