Git每日工作流程之回退
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