Git常用命令


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

几种常用的版本控制系统

  • cvs/vss---锁定模式
  • Subversion(svn)---合并模式
  • 上述都是集中版本控制系统,必须需要中央服务器
  • Mercury ---python版版本控制
  • Git---分布式版本控制

Part one

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

  • 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
  • 创建一个文件夹作为Git的仓库
$ mkdir one
  • 查看当前工作路径
$ pwd

/d/Git/one
  • 进入创建的仓库文件夹,并进行Git仓库的初始化
$ cd one
$ git init

Initialized empty Git repository in D:/Git/one/.git/
  • 查看当前仓库文件
$ dir -a

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

  • 初始化成功可以看到,当前路径的后面多了(master) master表示主干分支
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 ..." 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所示。

Git常用命令_第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 
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 
Date:   Thu Oct 11 10:25:23 2018 +0800

    修改后提交说明

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41
Author: RideoCos 
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 
Date:   Thu Oct 11 10:29:50 2018 +0800

    第三次修改说明

commit d8f41954f5298870fe6ed48fce2987f7f564a7c2
Author: RideoCos 
Date:   Thu Oct 11 10:25:23 2018 +0800

    修改后提交说明

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41
Author: RideoCos 
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明

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

  • 为了方便显示,现在只看这三次提交的commit id
$ git log --pretty==oneline

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

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

  • 获得当前最新版本信息,即当前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^^表示上两个,当想回到的版本较前时,有两种方法。

  • 方法一,HEAR~n,--n表示当前版本前n个版本
$ git reset --hard HEAD~2
HEAD is now at 0d35e3b 本次提交说明
这里我先回到第三次的版本后,才执行的回退前两个到第一个版本。
  • 方法二 --hard + commit id 推荐
    1.首先查看commit id
$ 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 
Date:   Thu Oct 11 10:02:36 2018 +0800

    本次提交说明

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

  • git reflog 查看所有操作日志
$ 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 reflog 的记录信息中的commit id 进行版本回退
$ git reset --hard 86d38d7

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

查看

$ git log

commit 86d38d7a8c0e09ddb6aac7d12c59fbcb7fdf85c1 (HEAD -> master)
Author: RideoCos 
Date:   Thu Oct 11 10:29:50 2018 +0800

    第三次修改说明

commit d8f41954f5298870fe6ed48fce2987f7f564a7c2
Author: RideoCos 
Date:   Thu Oct 11 10:25:23 2018 +0800

    修改后提交说明

commit 0d35e3bad423ec2f3d6042f5fee5cf73a7821c41
Author: RideoCos 
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 远程仓库

  • 远程克隆仓库到本地 http
$ git clone https://gitee.com/rideocos/Study.git

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

  • 本地更新同步到远程
$ git push

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

你可能感兴趣的:(Git常用命令)