glg = git log —stat —color 定位问题

glo #或者glol先看看log情况
glgp # git log --stat --color -p  
git log -p filename #这个命令真的看到了代码变化.

#这一句最正确: 要加-c 或者 -cc
git log -c -S 'setPicture_id' app/src/main/java/com/takungae/dagong30/dgruning.java 
####################################
# 这个最正确
####################################
git log -c -S '你要搜索的字符串比如删除的那一串' 你要搜索的文件路径/你要搜索的文件名.java 

gbs #二分法定位问题 todo
git bisect


git log #
git log -p filename #这个命令真的看到了代码变化.
glg # git log --stat --color 
git log filename #这个只是历史. 没有代码变化.
glp  #_git_log_prettily
git log --pretty=oneline 文件名
git log --graph --pretty=oneline --abbrev-commit #查看 分支的合并情况

git log --follow -p file
git log -- file-name 
git blame filename




#删除的内容如何找出来: 
git log -S <string> path/to/file
#例如: 
git log -S setPicture_id app/src/main/java/com/takungae/dagong30/dgruning.java
#这个blame方法不行, 据说可以试试bisect todo
git blame --reverse START..END app/src/main/java/com/takungae/dagong30/dgruning.java
#这一句最正确: 要加-c 或者 -cc
git log -c -S 'setPicture_id' app/src/main/java/com/takungae/dagong30/dgruning.java 
####################################
# 这个最正确
####################################
git log -c -S '你要搜索的字符串比如删除的那一串' 你要搜索的文件路径/你要搜索的文件名.java 

回退 todo

版本库存在的意义就是可以回退,
回退可以解决在错误的branch(比如被管理员锁定的master分支)提交了commit的问题.
特别好: https://tonydeng.github.io/2015/07/08/how-to-undo-almost-anything-with-git/

#先看版本, 决定回到哪个版本, 参见上面glg那个段落.
#checkout到另外应该提交的分支
gco #如果是已有分支, 那么需要gco.
gcd #checkout develop分支.
#rebase那个分支到最后的commit.
grbm #git rebase master
#回到master分支
gcm #checkout master分支.
#把master分支回退回去
git reset --hard <SHA1sum of commit N>

#版本回退
git reset --hard HEAD^ #Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,再往上就是 HEAD~100
#或者 指定回退的commit对象的id
git reset --hard 3628164 #版本号没必要写全,git会自动找
git reflog #要重返未来,

git checkout -- readme.txt把readme.txt #文件在工作区的修改全部撤销. add之前.
#如果在错误的分支上add了信息, 咋办? 
#系统提示: (use "git reset HEAD <file>..." to unstage)
grh filename #缩写git reset HEAD readme.md 
git reset HEAD readme.txt #把暂存区的修改撤销掉(unstage)[暂存区不复存在],重新放回工作区

参考

https://github.com/chenzhiwei/linux/tree/master/git

git cherry-pick

把已经提交的commit从一个分支移动到另一个分支。使用场景如下:

你有两个分支分别是master和stable,并且stable是master的一个历史commit。有一个bug存在于stable中,很明显这个bug也会存在于master中,你在stable里修复了这个bug,现在你也要在master里修复这个bug,这时你就需要使用cherry-pick把修复这个bug的commit移动到master分支里。

$ git checkout stable
$ git commit -m"fix a bug" # commit id: 2ea0234b1fa6
$ git checkout master
$ git cherry-pick 2ea0234b1fa6
$ vim xxx # solve conflicts
$ git commit -c 2ea0234b1fa6
git revert

git reset

一不小心执行了git add .,然后就可以用git reset命令来破了。

删除最近一次 commit ,但保留这次 commit 中修改的内容,即用git status来查看会显示有文件等待提交。

$ git reset --soft HEAD^
删除最近一次 commit ,并且不保留这次 commit 中的修改内容,即用git status来查看会显示没有改动。


git stash

暂时保存工作目录里的东东,随后可以再还原回来。

# git stash -a
# git stash list
# git stash pop