Git常用命令

2018-10-11  本文已影响0人  RideoCos

Git --- 分布式版本控制系统

几种常用的版本控制系统


Part one

Git 安装完成后进行如下操作:

$ git config --global user.name "xxx"
$ git config --global user.email "xxx"
 $ git config user.name
 $ git config user.email

Part two 创建版本库

进入Git bash 时,Git有默认路径,所以第一步先切换路径(也可以不切换,就使用默认路径)
$ cd D:/Git/My_Git
$ mkdir one
$ pwd

/d/Git/one
$ cd one
$ git init

Initialized empty Git repository in D:/Git/one/.git/
$ dir -a

注意 : 成功初始化Git仓库后,可以看到,新的仓库中存在三个文件,分别为. / .. / .git,.表示当前目录,.. 表示上级目录,.git是Git用来追踪版本控制的文件,请勿修改

RideoCos@RideoCos MINGW64 /d/Git/one (master)
$
首先我们将一个文件复制到Git仓库的文件夹中,也就是将文件放入D:/Git/one文件夹中,再使用Git命令添加此文件到仓库。
$ git add a.txt
$ git status


On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   a.txt

可以看到,Git提示在当前master主干下,有一个新文件a.txt没有提交。所以还需提交这个文件到仓库中。

$ git commit -m "本次提交说明"

[master (root-commit) 0d35e3b] 本次提交说明
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
$ git status

On branch master
nothing to commit, working tree clean

注意 : 添加文件到仓库需要两步操作,1.git add file ; 2,git commit -m "xxx",之所以需要两步的原因是因为,Git的操作分为工作区、暂存区、版本库,当在工作区执行git add命令后,实际上是将文件添加到暂存区,在执行 git commit提交后,将暂存区的文件提交到版本库,再进行版本控制。实际工作如下图1-1所示。

图1-1图1-1
若图片未能加载,请参考Git 工作区 暂存区 版本库 区别

Part three 时光穿梭

在仓库目录下D:/Git/one对添加的文件a.txt进行修改,将原内容hello world 改动为 good bye,使用命令进行查看改动信息。
$ git diff a.txt

diff --git a/a.txt b/a.txt
index 95d09f2..34e219a 100644
--- a/a.txt
+++ b/a.txt
@@ -1 +1 @@
-hello world
\ No newline at end of file
+good bye
\ No newline at end of file
$ git log

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41 (HEAD -> master)
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明
可以看到,第一次提交文件的具体信息,cimmit id记录了提交的id,Git就是通过每次操作的id来实现版本控制,除commit id 外还有提交的其他信息,包括提交人,提交时间,本次提交说明。

现在再次提交修改后的a.txt

$ git add a.txt
$ git commit -m "修改后提交说明"
$ git log 

commit d8f41954f5298870fe6ed48fce2987f7f564a7c2 (HEAD -> master)
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:25:23 2018 +0800

    修改后提交说明

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明
可以看到两次的操作都记录相关信息,现在再次重复上面步骤进行第三次提交操作。在a.txt文本内容添加“你好”。
$ git diff a.txt
$ git add a.txt
$ git commit -m "第三次修改说明"
$ git log

commit 86d38d7a8c0e09ddb6aac7d12c59fbcb7fdf85c1 (HEAD -> master)
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:29:50 2018 +0800

    第三次修改说明

commit d8f41954f5298870fe6ed48fce2987f7f564a7c2
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:25:23 2018 +0800

    修改后提交说明

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明

现在版本库已经有三条记录了,方便直观的进行Git的"时光穿梭"了。

$ git log --pretty==oneline

86d38d7a8c0e09ddb6aac7d12c59fbcb7fdf85c1 (HEAD -> master) 第三次修改说明
d8f41954f5298870fe6ed48fce2987f7f564a7c2 修改后提交说明
0d35e3bad423ec2f3d6042f5fee5cf73a7821c41 本次提交说明

可以看到,第三次提交即最新版本的commit id后面有一个(HEAD ->master)这句话,如何理解这句话可以参考分支-廖雪峰

$ git reset --hard HEAD

HEAD is now at 86d38d7 第三次修改说明
$ git reset --hard HEAD^
$ git reset --hard HEAD
HEAD is now at d8f4195 修改后提交说明

git reset --hard HEAD^ 表示回到当前版本的上一个版本,HEAD^^表示上两个,当想回到的版本较前时,有两种方法。

$ git reset --hard HEAD~2
HEAD is now at 0d35e3b 本次提交说明
这里我先回到第三次的版本后,才执行的回退前两个到第一个版本。
$ git log --pretty=oneline
86d38d7a8c0e09ddb6aac7d12c59fbcb7fdf85c1 (HEAD -> master) 第三次修改说明
d8f41954f5298870fe6ed48fce2987f7f564a7c2 修改后提交说明
0d35e3bad423ec2f3d6042f5fee5cf73a7821c41 本次提交说明

2.使用commit id 指定回退的版本 commit id 一般只用前几位即可

$ git reset --hard 0d35e3b

HEAD is now at 0d35e3b 本次提交说明

在经过方法二的操作,已经回到了最开始的版本,即第一次的添加

$ git log

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41 (HEAD -> master)
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明

现在看到,版本库只有第一次的添加信息,第二三次找不到信息了。那么如何通过版本回退方法回到第二三版本?

$ git reflog

0d35e3b (HEAD -> master) HEAD@{0}: reset: moving to 0d35e3b
86d38d7 HEAD@{1}: reset: moving to 86d38d7
0d35e3b (HEAD -> master) HEAD@{2}: reset: moving to HEAD~2
86d38d7 HEAD@{3}: reset: moving to 86d38d7
d8f4195 HEAD@{4}: reset: moving to HEAD
d8f4195 HEAD@{5}: reset: moving to HEAD^
86d38d7 HEAD@{6}: reset: moving to HEAD
86d38d7 HEAD@{7}: commit: 第三次修改说明
d8f4195 HEAD@{8}: commit: 修改后提交说明
0d35e3b (HEAD -> master) HEAD@{9}: commit (initial): 本次提交说明

可以看到,上面的日志记录了当前所有的操作记录,包括commit id 和 master分支的时间线。时间线是从左到右进行的,最后一次HEAD@{9}即当前时间线下的操作。

$ git reset --hard 86d38d7

HEAD is now at 86d38d7 第三次修改说明

查看

$ git log

commit 86d38d7a8c0e09ddb6aac7d12c59fbcb7fdf85c1 (HEAD -> master)
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:29:50 2018 +0800

    第三次修改说明

commit d8f41954f5298870fe6ed48fce2987f7f564a7c2
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:25:23 2018 +0800

    修改后提交说明

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41
Author: RideoCos <huanyu921@163.com>
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明
$ cat a.txt

good bye

你好
$ git checkout  a.txt

注意 : 只能删除在工作区上的操作,如果已经提交到暂存区就不能删除。


$ git rm a.txt
$ git commit -m "删除版本库"

Part four 远程仓库

$ git clone https://gitee.com/rideocos/Study.git

git clone后,就可以对本地仓库进行修改,修改后提交到版本库再git push到远程仓库同步更新

$ git push

git push 到远程仓库需要输入远程仓库的登录名与密码

上一篇下一篇

猜你喜欢

热点阅读