本文主要介绍一些我在日常开发中觉得比较有趣的Git基础命令

差异对比

日常开发中,差异对比是执行比较频繁的命令
HEAD一般指向当前分支的最后一次Commit,下面三种是我最常用的差异对比

git diff

尚未暂存的Working TreeHEAD的差异

git diff –cached

IndexHEAD的差异
注 : 别名git diff --staged

git diff HEAD

尚未暂存的Working Tree + IndexHEAD的差异

操作实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$ gst -sb
## master
$ ls
README.md
$ echo 'Hello' >> README.md
$ gst -sb
## master
M README.md
$ git diff
diff --git a/README.md b/README.md
index e69de29..e965047 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+Hello
$ git diff --cached # Stdout print nothing
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..e965047 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+Hello
-------------------
$ git add README.md
-------------------
$ gst -sb
## master
M README.md
$ git diff # Stdout print nothing
$ git diff --cached
diff --git a/README.md b/README.md
index e69de29..e965047 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+Hello
$ git diff HEAD
diff --git a/README.md b/README.md
index e69de29..e965047 100644
--- a/README.md
+++ b/README.md
@@ -0,0 +1 @@
+Hello

移除版本控制

git rm只会将文件或目录从版本控制中移除,但并不会从以前的提交记录中移除文件或目录

git rm

Working TreeIndex中移除
必须进行up-to-date检查,如果文件或目录在Working TreeIndex中的状态与HEAD不一致,则执行失败

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
$ gst -sb
## master
$ ls
README.md
$ git rm README.md
rm 'README.md'
$ gst -sb
## master
D README.md
$ ls # Stdout print nothing
-------------------------------------------------
$ git reset --hard HEAD # Reset HEAD , danger ops
HEAD is now at 03e27f0 init commit
-------------------------------------------------
$ echo 'Hello' > README.md
$ gst -sb
## master
M README.md
$ git rm README.md
error: the following file has local modifications:
README.md
(use --cached to keep the file, or -f to force removal)
$ git add README.md
$ gst -sb
## master
M README.md
$ git rm README.md
error: the following file has local modifications:
README.md
(use --cached to keep the file, or -f to force removal)

git rm -f

强制Working TreeIndex中移除,不进行up-to-date检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ gst -sb
## master
$ ls
README.md
$ echo 'Hello' > README.md
$ git add README.md
$ gst -sb
## master
M README.md
$ git rm -f README.md
rm 'README.md'
$ gst -sb
## master
D README.md
$ ls # Stdout print nothing

git rm –cached

只从Index中移除,保留Working Tree中的文件状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ gst -sb
## master
$ ls
README.md
$ echo 'Hello' > README.md
$ git add README.md
$ gst -sb
## master
M README.md
$ git rm --cached README.md
rm 'README.md'
$ gst -sb # README从Index删除,但保留在Working Tree中
## master
D README.md
?? README.md
$ cat README.md
Hello

重命名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ gst
On branch master
nothing to commit, working tree clean
$ ls
README.md src
$ find README.md src
README.md
src
src/Hello.java
src/World.java
$ git mv README.md README.md.bak
$ git mv src src.bak
$ git -sb
## master
R README.md -> README.md.bak
R src/Hello.java -> src.bak/Hello.java
R src/World.java -> src.bak/World.java

查看提交历史

常规查看(最常用)

--graph:图形化显示分支提交历史
--oneline:一个提交显示一行
--decorate:显示分支引用

1
2
3
4
5
6
7
8
9
10
11
12
$ git log --graph --oneline --decorate
* 807adc2 (HEAD -> master) C8
* 537a716 C7
* a272a81 M1
|\
| * c94d37d (topic) C4
| * 25737e7 C3
* | 78dd014 C6
* | 92ad9ff C5
|/
* c110877 C2
* 3847d71 C1

格式化显示

%h:Commit对象的简短哈希串
%t:Tree对象的简短哈希串
%p:父Commit对象的简短哈希串
%an:作者名字
%ae:作者邮件
%ad:修订日期
%s:Commit Message

1
2
3
4
5
6
7
8
9
10
11
12
$ git log --pretty=format:"%h %t %p %an %s" --graph
* 807adc2 bf5ac3a 537a716 zhongmingmao C8
* 537a716 f2e0d63 a272a81 zhongmingmao C7
* a272a81 525cbc2 78dd014 c94d37d zhongmingmao M1
|\
| * c94d37d 99248a5 25737e7 zhongmingmao C4
| * 25737e7 cc4ec62 c110877 zhongmingmao C3
* | 78dd014 a2622d9 92ad9ff zhongmingmao C6
* | 92ad9ff 771d565 c110877 zhongmingmao C5
|/
* c110877 e7b3299 3847d71 zhongmingmao C2
* 3847d71 fd092f0 zhongmingmao C1

提交历史搜索

--grep:搜索提交说明
--author:匹配作者
--committer:匹配提交者
--after:时间起点
--before:时间终点
--:特定路径

1
2
3
4
5
6
7
8
9
10
11
12
# 查找条件
$ git log --oneline --decorate --graph --grep=C --author=zhongmingmao --committer=zhongmingmao \
--after=2017-01-01 --before=2018-01-01 -- .
* 807adc2 (HEAD -> master) C8
* 537a716 C7
* c94d37d (topic) C4
* 25737e7 C3
| * 78dd014 C6
| * 92ad9ff C5
|/
* c110877 C2
* 3847d71 C1

撤销操作

撤销Commit

git commit --amend会重新生成新的Commit对象

修改提交日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ git log --oneline --decorate --graph
* d12ae38 (HEAD -> master) add README.md
$ gst
On branch master
nothing to commit, working tree clean
$ git commit --amend -m 'amend commit msg' # Create new commit object
[master 4e4145a] amend commit msg
Date: Fri Apr 14 19:39:45 2017 +0800
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
$ git log --oneline --decorate --graph
* 4e4145a (HEAD -> master) amend commit msg

合并修改+修改提交日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ git log --oneline --decorate --graph
* 9c9ab11 (HEAD -> master) C2
* e1fbcea C1
$ gst -sb
## master
A C3
$ git commit --amend -m 'C3' # Create new commit object , merge last commit(C2)
[master de41093] C3
Date: Fri Apr 14 19:48:58 2017 +0800
2 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 C2
create mode 100644 C3
$ git log --oneline --decorate --graph
* de41093 (HEAD -> master) C3
* e1fbcea C1

撤销Index的修改

git reset HEAD == git reset --mixed HEAD,用HEAD覆盖Index

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$ gst -sb
## master
MM C3
$ git diff
diff --git a/C3 b/C3
index f70f10e..35d242b 100644
--- a/C3
+++ b/C3
@@ -1 +1,2 @@
A
+B
$ git diff --cached
diff --git a/C3 b/C3
index e69de29..f70f10e 100644
--- a/C3
+++ b/C3
@@ -0,0 +1 @@
+A
$ git diff HEAD
diff --git a/C3 b/C3
index e69de29..35d242b 100644
--- a/C3
+++ b/C3
@@ -0,0 +1,2 @@
+A
+B
$ git reset HEAD C3 # Just reset Index , Not Working Tree
Unstaged changes after reset:
M C3
$ gst -sb
## master
M C3
$ git diff
diff --git a/C3 b/C3
index e69de29..35d242b 100644
--- a/C3
+++ b/C3
@@ -0,0 +1,2 @@
+A
+B

撤销Working Tree的修改

git checkout --,用Index覆盖Working Tree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ gst -sb
## master
MM C3
$ git diff
diff --git a/C3 b/C3
index f70f10e..35d242b 100644
--- a/C3
+++ b/C3
@@ -1 +1,2 @@
A
+B
$ git checkout -- C3
$ gst -sb
## master
M C3
$ git diff # Stdout print nothing

撤销IndexWorking Tree的修改

git reset --hard HEADgit checkout HEAD [filename]危险操作,将会丢失上次Commit后的所有修改,用HEAD覆盖IndexWorking Tree

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ git log --oneline --decorate --graph
de41093 (HEAD -> master) C3
* e1fbcea C1
$ gst -sb
## master
MM C3
$ git reset --hard HEAD
HEAD is now at de41093 C3
$ gst
On branch master
nothing to commit, working tree clean
1
2
3
4
5
6
7
8
9
$ gst -sb
## master
MM C3
$ git checkout HEAD C3
$ gst
On branch master
nothing to commit, working tree clean

from: http://zhongmingmao.me/2017/04/14/git-basic/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

Git++ - 有趣的命令相关推荐

  1. golang 命令行_如何使用Golang编写快速有趣的命令行应用程序

    golang 命令行 by Peter Benjamin 彼得·本杰明(Peter Benjamin) 如何使用Golang编写快速有趣的命令行应用程序 (How to write fast, fun ...

  2. Git基础(常用命令)介绍

    版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统. 关于版本控制分为三种:本地版本控制系统,如rcs:集中化的版本控制系统,如CVS.SVN:分布式版本控制系统,如Git. Gi ...

  3. Git npm相关命令

    Git 相关命令 查看用户名和密码 配置用户名和密码 查看git项目远程地址 添加git远程仓库 查看提交记录 查看已有tag 打标签 在某次提交记录上打标签 推送标签到远程 推送单个指定tag到远程 ...

  4. GIt/Github常用命令

    1)git init:初始化本地仓库 2)创建文件:touch read.txt 3)当操作本地的文件时,使用常用的命令,如(mv,ls..)就可以操作,当操作暂存区的文件时需要在命令前家git,并且 ...

  5. Git系列之git log高级命令

    原文地址 使用任何版本控制工具的目的都在于记录你代码的变化.这可以给予你查看项目历史的能力,去发现谁做出了贡献,弄清楚何时产生了bug,回滚到错误的修改.但是,如果你无法定位,获取这些历史记录将变得毫 ...

  6. Git使用教程-命令总结大全

    /在 cmd 上操作/ git help          // 帮助信息  常用git命令  和解释 git help -a      // 命令目录 git help -g      //手册 g ...

  7. Git操作手册|命令速查表

    Git操作手册|命令速查表 这篇文章主要介绍Git分布式版本管理与集中式管理的一些差异,总结下Git常用命令作为日后的速查表,最后介绍Git进阶的一些案例. 本文分为以下几个部分: Git与SVN差异 ...

  8. Linux 还能这么玩,10 个非常有趣的命令!

    Linux当中有很多比较有趣的命令,可以动手看看,很简单的. 1.rev命令 一行接一行地颠倒所输入的字符串. 运行: $rev 如输入:shiyanlou shiyanlou 2.asciiview ...

  9. git 与github 命令行操作与控制

    一.git 1.download下载 https://www.git-scm.com/ 2.配置 用户名和邮箱 假设用户名为"xxxx",邮箱为"xxxx@xxxx.co ...

最新文章

  1. PTA---指针错误汇总(就自己做个笔记)
  2. 彩色点云在虚拟现实中的应用
  3. 0代码就能做Python数据分析,这个Jupyter插件,用起来就像Excel一样简单
  4. 云原生落地难的五个痛点与解决方法
  5. 基于TCP协议的socket通信
  6. 操作系统:基本分段存储管理方式
  7. calibre中的hcell_关于calibre的Hcell你知道多少?
  8. 关于Ajax中文乱码的问题
  9. ARM Keil MDK开发STM32工程模板
  10. Windows10家庭中文版没有本地策略选项完美解决方案
  11. 11.30 iptables filter表案例 iptables nat表应用
  12. 【刘润五分钟商学院】-166几乎所有知识,都始于归纳法
  13. 关于微信小程序img标签不能显示图片的问题
  14. 计算机同步增长率公式,行测资料分析增长率的计算技巧
  15. 【jQuery进阶】子菜单插件Slight Submenu
  16. 甘谷2021年高考成绩查询入口,筑梦百天,赢在高考|甘谷一中2021届高考百日誓师大会...
  17. 面试官:为什么 0.1 + 0.2 == 0.300000004 ?
  18. optaplanner学习笔记(一)案例Cloud balance
  19. xiaoxin juju needs help
  20. 又是白嫖Gitee的一天,PicGo+Gitee搭建图床,用过的都说真香!!!

热门文章

  1. 事务策略: 了解事务陷阱--转
  2. 【复杂网络】复杂网络多种算法及工具应用集合
  3. 简单的MapReduce项目,计算文件中单词出现的次数
  4. Web3.0来了!玩法变了
  5. 格子大法与换入换出分析
  6. MySQL - 使用trace工具来窥探MySQL是如何选择执行计划的
  7. 白话Elasticsearch62-进阶篇之Highlighting高亮显示
  8. php 会议签到系统_人脸识别会议签到系统有哪些优点?
  9. js base_64 解密
  10. 面向过程和面向对象的区别