[原]git的使用(一)---建立本地仓库、add和commit、status和git diff、版本回退使用git reset
在window下已经安装了git的环境
1.建立本地仓库
mkdir test #建立test目录
cd test #进入目录
git init #创建好了本地git仓库,会发现在test目录中多了一个.git目录,并且这个目录是隐藏的
示例:
$ git init Initialized empty Git repository in F:/git-repo/test/.git/
init前
init后
2.提交文件到中转站和仓库(add和commit)
使用Notepad++创建一个文本文件readme.txt
(记得把Notepad++的默认编码设置为UTF-8 without BOM)不能使用记事本等其他工具创建
readme.txt文件位于test目录中
readme.txt文件内容为:
Git is a version control system. Git is free software.
[提交到中转站]在路径为test目录中执行命令
$ git add readme.txt #告诉git 将readme.txt文件添加到仓库等等提交(也可以认为添加到了仓库中转站)没有任何输出表示正确添加到中转站
[提交到仓库]在路径为test目录中执行命令
$ git commit -m "wrote a readme file" #告诉git 将刚才放置在中转站的提交到仓库 并给这个提交动作附上一个标签
[master (root-commit) 51af5b3] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
注意:注意:注意:
为什么提交要用add和commit 因为可以add多个文件到中转站,一次commit就可以将中转站中的文件提交到仓库。
比如:
$ git add file1.txt $ git add file2.txt file3.txt $ git commit -m "add 3 files."
------------------------------------------------------add时遇到的warning-----------------------------------------
$ git add file1.txt
warning: LF will be replaced by CRLF in test.txt.
The file will have its original line endings in your working directory.
------------------------------------------------------需要了解的概念-----------------------------------------
LF是linux下的换行符,而CRLF是enter + 换行
当创建文档的时候使用的环境是windows,而git运行环境在linux环境
-------------------------------------------------------解决这个warning--------------------------------------
git config --global core.autocrlf false
----------------------------------------------------------end--------------------------------------------------
3.git status和git diff
一般步骤为,检查init的git仓库的文件是否有修改 git status
如果有修改就查看修改的地方是不是正确的 git diff
如果修改正确的就提交的中转站 git add <file>
不清楚是否正确提交到中转站 git status
如果正确就再提交到仓库确保代码正常 git commit <file> -m "string"
$ git status #查看init仓库所有文件的状态,即查看当前文件test目录中的所有文件的状态(未修改/修改/更新)包括中转站中的文件状态
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt # 红色表示此文件被修改
no changes added to commit (use "git add" and/or "git commit -a")
$ git diff readme.txt #查看被修改的文件,修改了哪些东西 diff --git a/readme.txt b/readme.txt #比较修改前和修改后的文件 index d8036c1..53d4271 100644 --- a/readme.txt +++ b/readme.txt #在readme.txt中做了增加操作 @@ -1,2 +1,2 @@ -Git is a version control system. -Git is free software. \ No newline at end of file +Git is a distributed version control system. +Git is free software.
$ git add readme.txt #检查修改无误后提交到中转站
$ git status #确认各个文件的状态和中转站里的文件 On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: readme.txt
$ git commit readme.txt -m "add distributed " #将中转站里的文件提交到.git仓库 [master 9682929] add distributed 1 file changed, 2 insertions(+), 2 deletions(-)
最后,相当于所有的修改都已经提交到了git仓库里面
$ git status #查看整个Test目录的结果
On branch master
nothing to commit, working directory clean #已经clean了
4.git的快照commit
从之前的改动到现在已经提交了三个版本的readme.txt到.git仓库
版本1:wrote a readme file Git is a version control system. Git is free software. 版本2:add distributed Git is a distributed version control system. Git is free software. 版本3:append GPL Git is a distributed version control system. Git is free software distributed under the GPL.
查看git的快照commit,需要使用git log:
类似每次快照都要产生log文件,需要用git log来查看快照,git log是按照最新到最旧来显示。
如下:
################################
【需要了解的概念】:Git必须知道当前版本是哪个版本,在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
(注意我的提交ID和你的肯定不一样),
上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。
################################
$ git log commit f78cd0925b2bc2883d7ed4de49b1a851367ae56d #这一串数字代表快照的id号,由SHA1产生 Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 20:23:52 2016 +0800 #最新的commit快照 也叫做HEAD快照 append GPL commit 96829291d720b3b84d0ab2a5aad89b0af97a1394 Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 16:20:13 2016 +0800 add distributed #这是HEAD快照的前一个快照 用HEAD^表示 commit 51af5b36b85c52e86b6140d3a73b5e22cd3f78da Author: userlhb <lhb@lhb.com> Date: Sat Mar 26 15:36:57 2016 +0800 #最旧的commit快照 wrote a readme file #这是HEAD快照的前前一个快照 用HEAD^^表示,问题来了?如果前前一百个,怎么表示? HEAD~100
或者显示为一行,添加--pretty=oneline
$ git log --pretty=oneline f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
5.git中实现版本回退使用git reset
先看下面两幅图两分钟:
--------------------------------------------------------------------------------------------
图一 表示当前在append GPL这个版本上
-----------------------------------------------------------------------------------------------------
图二 表示当前在wrote a readme file这个版本上。
[看图说明]
git reset 可以控制指针 HEAD 在不同的快照直接切换,如果需要切换到上一个快照用git reset --hard HEAD^
git reset 和 git commit <file> -m "string" 的动作会被记录到git reflog中,使用git reflog可以查看记录
git log 查看所有提交到版本库中的快照(版本)
---------------------------------------------------------------------------------------------------
[实践出真知]
看图一,理解回退。
回退到中间那个版本add disributed
$ git log --pretty=oneline #列出.git仓库中的所有版本号 f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file $ git reset --hard HEAD^ #回退到前一个版本add distributed Unstaged changes after reset: M readme.txt $ git log --pretty=oneline #查看是否回退到add distributed,不能查看之前的版本。 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
有没有发现什么?对,回退到add distributed后,不能查看之前的版本。要是又要回退到最开始那个版本怎么办呢?
看图二,理解回退到仓库中最新的那个版本:因为 git reflog 能记录 git reset和git commit <file> -m "string"的动作,所以可以
使用git reflog来查看每个动作的id号,然后通过id号回退到最新的那个版本append GPL
[实践出真知]
$ git reflog #罗列出所有的HEAD动作 9682929 HEAD@{0}: reset: moving to HEAD^ f78cd09 HEAD@{1}: commit: append GPL #append GPL 的id是 f78cd09 9682929 HEAD@{2}: commit: add distributed 51af5b3 HEAD@{3}: commit (initial): wrote a readme file
$ git reset --hard f78cd09 #移动HEAD指针到 f78cd09 即 append GPL $ git log --pretty=oneline #查看是否切换到append GPL 这个版本 f78cd0925b2bc2883d7ed4de49b1a851367ae56d append GPL 96829291d720b3b84d0ab2a5aad89b0af97a1394 add distributed 51af5b36b85c52e86b6140d3a73b5e22cd3f78da wrote a readme file
接下一篇:git的使用(二)
参考git教程:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
出处:http://www.cnblogs.com/horizonli/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
支付宝(alipay) 二维码打赏 |
微信(wechat) 二维码打赏 JUST LI(**波) |
微信公众号: 木子李的菜田 |