1、 怎么查看版本演变历史
- 1)、查看所有当前分支的历史
$ git log [-- file | path]
不加-- file或path参数查看所有文件。增加仅查看指定文件或文件夹。
该命令会展示 commit的完整SHA、作者、日期、commit信息描述。如下图。

- 2)查看所有分支的历史
$ git log --all
- 3)显示效果参相关参数
$ git log --graph --oneline -n
--graph 展示图形化log --oneline 简写commit信息 -n 传入一个数字,显示n条记录

- 4)仅显示简要的增改行数统计
$ git log --stat

- 5)查看某个文件的所有修改
$ git log -p [-- file]
- 6)查看某个文件最后一次修改
$ git log -p -1 [-- file]
注意:git log -p 后面还可以加commit-hash,作用等同于 git show commit-hash。显示一次提交的修改内容。
2、怎么修改最新的commit的message
- 对最近一次的commit信息进行修改
$ git commit --amend
注意:该命令另一个作用,可以将暂存区的修改提交到最后一次commit中
执行后,会触发命令行文本编辑。# 为注释。修改是只需前面的message修改,之后使用命令行文本编辑保存即可。效果如下图。

3、怎么修改老的commit的message
-
step0:查找到想修改message的上一级commit的 commit-hash
-
step1:使用下面命令,调起编辑页面
$ git rebase -i [要更改的commit的上一级commit]

- step2:将 pick修改为edit
修改 add another line 的commit描述,如下:
1 pick 4ee8fd3 add a line
2 edit 5a75e01 add another line
- step3: 通过以下命令,修改message。
git commit --amend
- step4:git rebase --continue保存修改后。
- step5:如果修改有多个,需要 step3、step4重复执行。成功后信息,如下
[分离头指针 aa93824] add another line:change-message
Date: Sun Sep 15 19:41:13 2019 +0800
1 file changed, 1 insertion(+)
Successfully rebased and updated refs/heads/master.
git rebase 工作的过程中,就是用了分离头指针。rebase 意味着基于新 base 的 commit 来变更部分 commits。它处理的时候,把 HEAD 指向 base 的 commit,此时如果该 commit 没有对应 branch,就处于分离头指针的状态,然后重新一个一个生成新的 commit,当 rebase 创建完最后一个 commit 后,结束分离头状态,Git 让变完基的分支名指向 HEAD。
4、怎么把连续的多个commit整理成一个
- step0:查找到想修改的 commit-hash
- step1:调起编辑页面
$ git rebase -i [要更改的commit的上一级commit]
- Step2:将 pick修改为squash。:wq保存
- Setp3: 之后在编辑器填写,描述信息。 :wq保存
- Step4:成功后的信息
[分离头指针 978c6bc] add a line
Date: Sun Sep 15 19:40:51 2019 +0800
1 file changed, 2 insertions(+)
Successfully rebased and updated refs/heads/master.
5、怎么把间隔的多个commit整合成一个
方法步骤与4、怎么把连续的多个commit整理成一个相同,不同之处需要将不间隔的commit,移动到上下关系的位置。
6、怎么比较工作区和暂存区所含文件的差异
$ git diff
#比较具体的文件或者路径
$ git diff -- [filename/pathname]
7、怎么比较暂存区和HEAD所含文件的差异
$ git diff --cached
或者
$ git diff --staged
8、看看不同提交的指定文件的差异
git diff commit-id1 commit-id2 -- <file>...
9、如何让暂存区恢复成和HEAD的一样
$ git reset HEAD
git reset 有三个参数
--soft 这个只是把 HEAD 指向的 commit 恢复到你指定的 commit,暂存区 工作区不变
--hard 这个是把 HEAD,暂存区,工作区 都修改为 你指定的 commit 的时候的文件状态
--mixed 这个是不加时候的默认参数,把 HEAD,暂存区 修改为 你指定的 commit 的时候的文件状态,工作区保持不变
10、如何回滚线上代码 git revert
线上代码,通常会放在远程分支,这是要回滚某次代码,需要使用git revert。因为git reset 方法会改变改变提交历史,共同协作的情况下,看能会导致多个客服端仓库进行解决冲突。使用git revet方式进行回滚会解决这种问题。
- 1)回退某次commit
$ git revert commmmit-hash
$ git revert HEAD~1
- 2)回退多个commit
# 不连续/连续
$ git revert commit-hash1,commit-hash2,commit-hash3
$ git revert HEAD~3,HEAD~2,HEAD~1
# 连续
# 左开右闭区间(commit-hash1-pre,commit-hash3]
$ git revert commit-hash1-pre...commit-hash3
11、如何取消暂存区部分文件的更改
$ git reset HEAD -- <file>...
12、如何让工作区的文件恢复和暂存区一样
$ git checkout -- <file>...
注意:2.23版本,为了区分checkout恢复代码和切分支,新版本将其拆分成 git restore用于丢弃工作区的改动。git switch 用于切分支
恢复工作区用 checkout/restore,恢复暂存区用 reset。
13、正确删除文件的方法
$ git rm <file>g
14、开发中临时加塞了紧急任务怎么处理
- 1)将当前工作区内容存放到"堆栈"中
$ git stash
- 2)查看stash中存放的信息
$ git stash list
- 3)把"堆栈"里面的内容弹出到工作区中,同时丢弃"堆栈"中最新的信息
$ git stash pop [stash_id]
- 4)把"堆栈"里面的内容弹出到工作区中,同时"堆栈"中信息还在
$ git stash apply
- 5)删除一个存储的进度。如果不指定stash_id,则默认删除最新的存储进度。
$ git stash drop [stash_id]
- 6)删除所有存储的进度
git stash clear
15、如何指定不需要Git管理的文件
.gitignore
- 配置语法
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符;
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
- .gitignore模板
注意:.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未track状态)
git rm -r --cached .
git add .
git commit -m 'commit-message'