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 <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的"时光穿梭"了。

  • 为了方便显示,现在只看这三次提交的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 <huanyu921@163.com>
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 <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 远程仓库

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

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

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

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

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

推荐阅读更多精彩内容

  • 查看、添加、提交、删除、找回,重置修改文件 git help # 显示command的help git sho...
    Swiftor阅读 2,074评论 0 2
  • 查看仓库状态和文件更改 查看工作区状态:git status与最近的一次add或commit比较文件的不同:git...
    burningalive阅读 347评论 0 0
  • 我的常用: ===================================** 撤销工作修改:**1、gi...
    ddai_Q阅读 704评论 0 5
  • 一、 Git 常用命令速查 git branch 查看本地所有分支 git status 查看当前状态 git c...
    走在路上的日子阅读 1,892评论 0 22
  • 2016年8月16日 晴 我们乘着一条华丽的船 并不知道港湾在东还是南 等待她驶向意料之中 或完全陌生的彼岸 我虽...
    鲜栗子阅读 181评论 0 0