选择修订版本
1.单个修订版本
简短的SHA-1
Git十分智能,只需要提供SHA-1的前几个字符就可以获取对应的那次提交,当让你提供的SHA-1数量不得少于4个
//查看提交日志
$ git log
commit 046d5f7dfc4a390eb2ba679c166b795d33ece362 (HEAD -> master)
Author: unknown
Date: Fri Jan 17 10:29:10 2020 +0800
‘提交修改文件
commit f8db1c9799c5edb610e67ca4a30a850a3e99fc70
Author: unknown
Date: Thu Jan 16 11:36:44 2020 +0800
优秀
MagicData@DESKTOP-NQK66AL MINGW64 /d/phpstudy_pro/WWW/新建文件夹 (master)
//git show SHA-1 获取对应的提交
$ git show f8db
commit f8db1c9799c5edb610e67ca4a30a850a3e99fc70
Author: unknown
Date: Thu Jan 16 11:36:44 2020 +0800
优秀
diff --git a/README b/README
new file mode 100644
index 0000000..4732b90
--- /dev/null
+++ b/README
@@ -0,0 +1,2 @@
+o My Project
+封建帝国海军返还甲方,给反倒是三国杀
\ No newline at end of file
//获取简短的日志 默认使用7个字符
$ git log --abbrev-commit --pretty=oneline
//结果只输出对应的信息
046d5f7 (HEAD -> master) ‘提交修改文件
f8db1c9 优秀
2.分支引用
指明一次提交最直接的方法是有一个指向它的分支引用。
就是利用分支名可以直接查看最后一次提交的对象
//查看分支名
$ git branch
* master
//利用分支名查看版本信息
$ git show master
commit 046d5f7dfc4a390eb2ba679c166b795d33ece362 (HEAD -> master)
Author: unknown
Date: Fri Jan 17 10:29:10 2020 +0800
‘提交修改文件
diff --git a/README b/README
deleted file mode 100644
index 4732b90..0000000
--- a/README
+++ /dev/null
@@ -1,2 +0,0 @@
-o My Project
-封建帝国海军返还甲方,给反倒是三国杀
\ No newline at end of file
3.引用日志
$ git reflog
046d5f7 (HEAD -> master) HEAD@{0}: commit: ‘提交修改文件
f8db1c9 HEAD@{1}: commit (initial): 优秀
//根据引用日志来查看版本
$ git show HEAD@{1}
4.祖先引用
在引用的尾部加一个^,GIT会将其解析为该引用的上一个提交
在 ^ 后面添加一个数字——例如 d921970^2 代表 “d921970 的第二父提交”
$ git log --pretty=format:'%h %s' --graph
* $h ‘提交修改文件
* $h 优秀
//查看HEAD的父提交
$ git show HEAD^
commit 1c3618887afb5fbcbea25b7c013f4e2114448b8d
Author: Tom Preston-Werner
Date: Fri Nov 7 13:47:59 2008 -0500
ignore *.gem
交互式暂存
$ git add -i
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
暂存与取消暂存
What now> 提示符后键入 2 或 u,脚本将会提示想要暂存哪个文件:
What now> 2
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
//要暂存 TODO 与 index.html 文件,可以输入数字:
Update>> 1,2
staged unstaged path
* 1: unchanged +0/-1 TODO
* 2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
//每个文件前面的 * 意味着选中的文件将会被暂存。
//如果在 Update>> 提示符后不输入任何东西并直接按回车,Git 将会暂存之前选择的文件:
Update>>
updated 2 paths
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 1
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
储藏与清理
当你在项目的一部分上已经工作一段时间后,所有东西都进入了混乱的状态,而这时你想要切换到另一个分支做一点别的事情。 问题是,你不想仅仅因为过会儿回到这一点而为做了一半的工作创建一次提交。 针对这个问题的答案是 git stash 命令。
储藏会处理工作目录的脏的状态——即跟踪文件的修改与暂存的改动——然后将未完成的修改保存到一个栈上
1.储藏工作
//对项目执行了修改,
$ git status
Changes to be committed:
(use "git reset HEAD ..." to unstage)
modified: index.html
Changes not staged for commit:
(use "git add ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
modified: lib/simplegit.rb
//想要切换分支,但是还不想提交之前的工作,所以储藏修改。将新的储藏推送到栈上,运行git stash
$ git stash
Saved working directory and index state \
"WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file
(To restore them type "git stash apply")
//查看储藏的东西
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
//将刚刚存储的工作重新应用:git stash apply
//如果想应用其中一个更久的储藏,可以通过名字指定
git stash apply stash@{2}
签署工作
搜索
无论仓库里的代码量有多少,你经常需要查找一个函数是在哪里调用或者定义的,或者一个方法的变更历史。 Git 提供了两个有用的工具来快速地从它的数据库中浏览代码和提交。
//从提交历史或者工作目录中查找一个字符串或者正则表达式
// -n 参数来输出 Git 所找到的匹配行行号
$ git grep -n gmtime_r
compat/gmtime.c:3:#undef gmtime_r
compat/gmtime.c:8: return git_gmtime_r(timep, &result);
compat/gmtime.c:11:struct tm *git_gmtime_r(const time_t *timep, struct tm *result)
compat/gmtime.c:16: ret = gmtime_r(timep, result);
compat/mingw.c:606:struct tm *gmtime_r(const time_t *timep, struct tm *result)
compat/mingw.h:162:struct tm *gmtime_r(const time_t *timep, struct tm *result);
date.c:429: if (gmtime_r(&now, &now_tm))
date.c:492: if (gmtime_r(&time, tm)) {
git-compat-util.h:721:struct tm *git_gmtime_r(const time_t *, struct tm *);
git-compat-util.h:723:#define gmtime_r git_gmtime_r
//--count 选项来使 Git 输出概述的信息,仅仅包括哪些文件包含匹配以及每个文件包含了多少个匹配。
//想看匹配的行是属于哪一个方法或者函数,你可以传入 -p 选项