git 常用命令整理

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 <www.adadad@qq.com>
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 <www.adadad@qq.com> 1565679351 +0800
committer liuzhao <www.adadad@qq.com> 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    回退
posted @ 2019-09-24 17:38  皇家玄学团  阅读(223)  评论(0编辑  收藏  举报