Git提交文档部分内容
git add -p [filename]
git add命令加上参数-p会询问是否将当前区块加入暂存区,选择y表示全部加入暂存区,选择n表示完全不加入暂存区,由于这里我们只想将部分内容加入暂存区,所以选择e(edit缩写),然后弹出VIM编辑器。
git blame查看文件由哪次提交修改
- git可以团队开发,难免会出现开发错误,可能要明确责任是由谁造成的。
git blame [filename]
git blame -L 2,10 [filename] //文件2~10行内容
git blame -L ,10 [filename] //文件1~10行内容
git blame -L 4, [filename] //文件4~最后行内容
查看提交历史
//精简提交历史
git log --pretty=oneline || git log oneline
//自定义查看提交历史
git log --pretty=format:"1.当前版本号:%h 2.提交人:%an; 3.提交时间:%cr; 4.提交备注:%s;" -5
//查看分支的合并情况
git log --graph --pretty=oneline --abbrev-commit
git show
git show [--name-only|--name-status] --pretty=short [commitId]
git show --name-status --pretty=short 886d4c1
commit 886d4c1b84d882da8523f3ba7ce967d071f6d305 (HEAD -> master, origin/master, origin/HEAD)
Author: liuzhao
Date: Tue Aug 13 14:55:51 2019 +0800
add -p new.txt文件,add a.txt文件,追加add b.txt
a.txt
b.txt
new.txt
git show -s --pretty=raw 886d4c1
tree 3e69d62f211b122dbf592aa89ca40f32afd11060
parent 302fe2b974aa28c698b8820ba82456b8711fc57d
author liuzhao 1565679351 +0800
committer liuzhao 1565679454 +0800
add -p new.txt文件,add a.txt文件,追加add b.txt
git show-branch
- 查看分支提交
! [liuzhao] ceshi-1
* [master] add -p new.txt文件,add a.txt文件,追加add b.txt
--
* [master] add -p new.txt文件,add a.txt文件,追加add b.txt
* [master^] add new.txt
* [master~2^2] ceshi-1,追加第三行的aaaa
* [master~3] ceshi-1,追加第三行,追加第四行
+ [liuzhao] ceshi-1
-- [master~4] Merge branch 'master' of http://gogs.km360.cn/liuzhao/ceshi
Git查看指定文件的sha-1值
git hash-object [filename]
分支
- 创建分支
git branch [分支名]
- 创建分支,并切换新分支
git checkout -b [分支名]
- 改分支名
git branch -m [旧名称] [新名称]
- 切换分支
git checkout [分支名]
- Git基于指定commit提交创建分支
git checkout -b [分支名] [commitId]
git branch [分支名] [commitId]
- Git基于指定stash储藏创建分支
git stash branch [分支名]
- Git查看分支创建时间
git reflog show --date=iso [分支名]
- Git删除指定分支
//不能在当前分支删除当前分支,必须切换到其他分支
git branch -d [分支名]
//如果一个分支未进行合并,Git可能会阻止对它的删除,不过也可以强制删除
git branch -D [分支名]
//一次性删除两个分支,分支名称用空格分隔。
git branch -D [分支名1] [分支名2]
- Git恢复被删除的分支
git branch [删除的分支名] [id:删除分支的sha-1]
#用其他名字命名:
git branch [新分支名] [id:删除分支的sha-1]
注:如果忘记了commit对象的sha-1值,可以通过git reflog命令找回。
++---++
Git删除与恢复
- Git删除暂存区的指定文件
//删除暂存区的文件
git rm --cached [filename]
//递归删除所有暂存区
git rm -r --cached . || rm .git/index
//删除暂存区与工作区的文件
git rm [filename]
- 将暂存区内容还原到工作区
git checkout [filename]
- Git恢复删除的文件
//rm filename删除:只删除工作区,并且暂存区存在的文件
git checkout [filename]
//用git rm filename删除:工作区与暂存区不存在,只能从commit提交记录中恢复。
git checkout HEAD [filename]
- 回退提交
mixed、soft和hard:
(1).--mixed:默认值,当重置分支所指向commit提交位置时,暂存区中的内容会被新指向的commit提交内容所替换,工作区内容不变。
(2).--soft:暂存区和工作区的内容都保持原样,不会被替换。
(3).--hard:暂存区和工作区的内容都会被新指向的commit提交内容所替换;git reset --hard只影响被跟踪的文件,如果工作区有新增的文件,并不会被影响。
git reset [版本号|HEAD|分支名] --hard
- 版本号回退
git reset 5609309 --hard
HEAD回退
HEAD执行当前分支,^当前分支所指向提交的前一个提交,^^表示当前分支所指向提交的前一个分支的前一个分支,以此类推;^^过多自然不太方便,可以使用HEAD~2表示。
git reset HEAD^ --hard
- 分支回退
git reset master^ --hard
最后说明:
假如commit已经被push到远程仓库上,那么其他开发人员可能会基于对应的commit提交进行开发产生新的commit,如果此时进行reset操作,会造成其他开发人员的提交历史丢失,这可能会产生严重后果。
git stash 储存工作内容
存储命令
只能将已经跟踪和非.gitignore忽略的文件储藏,未跟踪的文件不会被存储。
git stash [-m "备注"]
git stash push -[参数] [filename] -m "备注"
git stash save -[参数] "备注" [filename]
push 和 save 区别
push 可以指定filename,save会储存所有匹配。
未跟踪文件一并存储 -u是--include-untracked的简略形式。
git stash push -u
.gitignore忽略的一并存储,所有
git stash push -a
不储存暂存区
//-k是--keep-index简略形式,表示不重置暂存区,默认值是--no-keep-index。
git stash push -k
- 查看所有存储内容:
git stash list
- 应用储藏内容:
//应用最新的储藏内容
git stash appy
//将储藏内容弹出并应用,储藏内容会被从储藏列表中删除。
git stash pop
指定应用哪个储藏
git stash apply stash@{1}
- 删除储存内容:
git stash drop stash@{1} # 删除指定储藏
git stash clear # 删除所有储藏
merge
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "备注" [分支名]
diff
- 比较暂存区与工作区之间的差异:
git diff [filename]
- 比对指定commit与工作区的文件:
git diff [commitId] [filename]
- 比对暂存区与指定提交差异:
git diff --cached [commitId] [filename]
rebase (修改提交历史)
1. git rebase -i [commitId]
2. git rebase --continue 继续
3. git rebase --abort 回退