Git使用心得(一)

本文旨在记录自己学习Git的一些操作体验,同时也分享给大家,使用的为Windows系统:


Windows下安装Git

请同学们自行去Git官网下载安装,安装成功后在CMD命令窗口
输入git --version回车后会看到对应的版本信息,
如下:
git安装后版本信息查看
接下来,我们在开始菜单中找到“Git”->“Git Bash”,打开后跳出类似命令窗口的东西,
后续我们命令执行工具都在此东东下面完成
Git命令运行工具

安装完成后还需要最后一步设置,在命令行输入如下命令:

$ git config --global user.name "Your Name"*
$ git config --global user.email "email@example.com"*

因为Git是分布式版本控制系统,所以每个机器都必须自报家门:你的名字和Email地址
注意git config命令的--global参数,这个参数是全局的意思表示你这台机器上的所有Git仓库都会使用这个配置,当然也可
以对某个仓库指定不同的用户名和Email地址

到这里Git的安装就讲完了,接下来我们来使用Git来做文件版本控制


Git版本库

版本库又名版本仓库,英文名Repository,和SVN等其他版本控制工具一样,就是一个目录,这个目录里面的所有文件
都可以被Git管理起来,每个文件的修改删除Git都可以跟踪,以便在将来还原

创建一个版本库非常简单,简历一个空文件目录,然后在该目录下使用git init命令初始化将该目录变成Git可识别的仓库即可

thinkpad@thinkpad-PC MINGW64 ~
$ mkdir learngit

thinkpad@thinkpad-PC MINGW64 ~
$ cd learngit/

thinkpad@thinkpad-PC MINGW64 ~/learngit
$ pwd
/c/Users/thinkpad/learngit

thinkpad@thinkpad-PC MINGW64 ~/learngit
$ git init
Initialized empty Git repository in C:/Users/thinkpad/learngit/.git/

现在Git仓库已经建好了,我们会发现在我们建立的文件夹下面出现了一个隐藏的.git的文件夹,没错这就是仓库初始化后出现的Git配置信息,没事可不要乱动哟。

若你没有看到.git的文件夹也没事,因为该文件夹是隐藏的,使用ls -ah命令即可看见

thinkpad@thinkpad-PC MINGW64 ~/learngit (master)
$ ls -ah
./  ../  .git/

所有的版本控制系统都只能跟踪文本文件的改动,二进制文件无法跟踪其内容的变化,另外Microsoft的Word格式为二进制,故版本控制系统无法进行跟踪其改动。

另使用Microsoft记事本同学的一定要注意:千万不要使用Windows自带的记事本编辑任何文件,原因是Microsoft记
事本团队在每个记事本内容的最前面加入了0xefbbbf(十六进制)的字符,所以你会遇到一些不可思议的问题,比如网页前面多了个?等

Git文件操作-1

下面我们在已经初始化好的learngit仓库下创建a.txt文件,内容如下

Git is a version control system.
Git is free software.
  • 使用git add命令将文件添加到仓库
thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git add a.txt
warning: LF will be replaced by CRLF in testFiles/a.txt.
The file will have its original line endings in your working directory.

注:出现如上警告原因为windows下的换行符为CRLF,而linux下的换行符为LF,在windows下使用git bash提交将会出现如下情况,后续如经常出现不用刻意去管

  • 使用git commit命令将文件提交到仓库
thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git commit -m "第一次使用提交命令备注"
[master (root-commit) 4f03f9e] 第一次使用提交命令备注
warning: LF will be replaced by CRLF in testFiles/a.txt.
The file will have its original line endings in your working directory.
 1 file changed, 2 insertions(+)
 create mode 100644 testFiles/a.txt

注:git commit -m "本次提交备注",-m 所带参数为提交说明

现在我们运行git status命令来查看下当前版本库的状态

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git status
On branch master
nothing to commit, working tree clean

注:该提示告诉我们没有需要提交的修改,而且工作目录是干净的

git add可以多次添加文件,而git commit一次可以提交很多文件,所以可以多次add不同的文件

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "commit 3 files."

小结

初始化一个Git仓库,使用git init命令。
添加文件至Git仓库,分两步:

  • 1、使用git add <file>添加文件,可反复使用
  • 2、使用git commit 提交,完成

Git文件操作-2

我们已经成功地添加了一个a.txt文件至仓库了,现在我们继续工作,修改a.txt内容成如下:
Git is a distributed version control system.
Git is free software

现在运行git status命令继续查看结果

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git status
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:   a.txt

no changes added to commit (use "git add" and/or "git commit -a")

注:上面的命令告诉我们.文件已经被修改过了,但还没有准备提交的修改。

我们有些时候想查看修改了那些内容,那么就可以执行git diff命令,如下:

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git diff
diff --git a/testFiles/a.txt b/testFiles/a.txt
index 46d49bf..9247db6 100644
--- a/testFiles/a.txt
+++ b/testFiles/a.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.
warning: LF will be replaced by CRLF in testFiles/a.txt.
The file will have its original line endings in your working directory.

注:上述代码-号部分为老的内容,+号部分为新的内容,没有符号为老的内容

知道了修改的具体内容后我们就可以安心的提交代码了,那么提交修改和提交新增文件同样的是两步,第一步是git add,第二步为git commit ,下面我们看下执行第一步后使用git status命令查看版本库状态

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git status
warning: LF will be replaced by CRLF in testFiles/a.txt.
The file will have its original line endings in your working directory.
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   a.txt

注:上述说明将要被提交的修改包括a.txt文件,下一步就可以放心的执行第二步进行提交了

下面执行第二步提交操作

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git commit -m "修改a文件内容后再次commit提交"
[master warning: LF will be replaced by CRLF in testFiles/a.txt.
The file will have its original line endings in your working directory.
88093bf] 修改a文件内容后再次commit提交
warning: LF will be replaced by CRLF in testFiles/a.txt.
The file will have its original line endings in your working directory.
 1 file changed, 1 insertion(+), 1 deletion(-)

注:以上命令就是提交后的输出信息

我们再次执行git status命令来查看当前版本库的状态

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git status
On branch master
nothing to commit, working tree clean

注:以上输出指当前工版本库没有需要提交的文件,工作目录是干净的

在开发中我们经常提交修改文件,某一天你忘了你上次提交的内容是什么,那么日志查看命令就显得尤为重要了,命令及输出如下:

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git log
commit 92ba36d082e2623e748b6c5f88c15681e4c5710b
Author: renjj <renjj@zcxny.cn>
Date:   Wed Feb 1 14:47:00 2017 +0800

    第三次修改提交备注

commit 88093bf8dbddc28ccd045f0c32cdf37ac238d819
Author: renjj <renjj@zcxny.cn>
Date:   Wed Feb 1 14:40:16 2017 +0800

    修改a文件内容后再次commit提交

commit 4f03f9ee4018a309d9b3196a1780f6a950098f6f
Author: renjj <renjj@zcxny.cn>
Date:   Tue Jan 31 19:50:56 2017 +0800

    第一次使用提交命令备注

注:如果觉得输出太多眼花缭乱,可以加上 --pretty=oneline参数,其输出如下:

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git log --pretty=oneline
92ba36d082e2623e748b6c5f88c15681e4c5710b 第三次修改提交备注
88093bf8dbddc28ccd045f0c32cdf37ac238d819 修改a文件内容后再次commit提交
4f03f9ee4018a309d9b3196a1780f6a950098f6f 第一次使用提交命令备注

注:一大串字符是指commitid,因Git为分布式版本控制原因故不能使用SVN中的1,2,3之类的数字,而是以SHA1算法算出的数字
以16进制表示,每提交一个版本,Git则会讲它们自动串成一条线

小结

  • 1、要随时掌握工作区的状态,使用git status命令
  • 2、如果git status告诉你有文件修改过,可以使用git diff查看修改内容
  • 3、若想查看提交过的记录则可以使用git log查看日志记录

现在你已经学会了提交修改到版本库,现在再练习一次,修改a.txt内容如下,然后尝试提交:
Git is a distributed version control system.
Git is free software distributed under teh GPL.

Git文件操作-3

下面我们回退到上一个版本,使用git reset命令,上一个版本是HEAD,上上个版本为HEAD^,上100个版本为HEAD~100

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git reset --hard HEAD^
HEAD is now at 88093bf 修改a文件内容后再次commit提交
注:--hard有何作用暂时不做说明,先加上,后面再讲解,现在查看内容,你会发现果然回退到上一个版本了
thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ cat a.txt
Git is a distributed version control system.
Git is free software.

接下来我们继续使用git log信息查看版本库提交日志

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git log
commit 88093bf8dbddc28ccd045f0c32cdf37ac238d819
Author: renjj <renjj@zcxny.cn>
Date:   Wed Feb 1 14:40:16 2017 +0800

    修改a文件内容后再次commit提交

commit 4f03f9ee4018a309d9b3196a1780f6a950098f6f
Author: renjj <renjj@zcxny.cn>
Date:   Tue Jan 31 19:50:56 2017 +0800

    第一次使用提交命令备注

果然,已经找不到最新的那个版本日志信息了,但这时候你又想再回到最新的版本,怎么办?办法还是有的,只要上个命令行窗口还没有被关掉,你就可以顺着往上找到那个最新的commit id,于是就可以指定回退到未来的某个版本。

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git reset --hard 92ba36d082e(此处只写一部分即可,Git会自动去匹配)
HEAD is now at 92ba36d 第三次修改提交备注
然后查看内容和日志发现又回来了,是不是很神奇呢?

现在你关掉电脑休息了会,发现我又想回到另外一个版本,这时候找不到commit id该怎么弄呢?Git提供了一个命令git reflog用来记录你每一次命令:

thinkpad@thinkpad-PC MINGW64 ~/learngit/testFiles (master)
$ git reflog
92ba36d HEAD@{0}: reset: moving to 92ba36d082e
88093bf HEAD@{1}: reset: moving to HEAD^
92ba36d HEAD@{2}: commit: 第三次修改提交备注
88093bf HEAD@{3}: commit: 修改a文件内容后再次commit提交
4f03f9e HEAD@{4}: commit (initial): 第一次使用提交命令备注
注:最前面则是commit id,拿到commit id我们就能够随意回退到指定版本了

小结

  • 1、HEAD指向的版本就是当前版本,因此,Git可以让我们任意退进,使用命令git reset --hard commit_id 即可
  • 2、回退前使用git log可以查看历史,以便确认要回退哪个版本
  • 3、要返回到未来可以使用git reflog查看命令历史,以便确定要回退的的版本

本人也在学习摸索阶段,如写得有误的地方,请朋友们指出及时改正

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,869评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,716评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,223评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,047评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,089评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,839评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,516评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,410评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,920评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,052评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,179评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,868评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,522评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,070评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,186评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,487评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,162评论 2 356