1. 如果只想add修改了的文件咋办?
git add . 或者git add -A 都会把全部包括本地不需要的都一股脑添加上了, 也许你需要的是下面的命令: git ls-files --modified | xargs git add
2. 本地有修改又没有验证好或者干脆暂时不想提交,又或者临时有更紧急的bug等着修改,咋破?
这种情况其他可以有两种解决方案:
1. 你修改一个问题就本地拉一个分支,这样你就可以直接提交到本地的分支了;完事后验证OK切换到正确的分支再cherry-pick后推送到服务器等待Code review即可,这种要求你养成改一个bug或者做一个需求,本地都有拉一个对应的分支的好习惯,对于做大功能时很有用;
2. 也可以直接将改动stash缓存到本地仓库,只要仓库在,你没有主动清除,它就在!stash和tag一样都是不区分分支的,对应的都是仓库,全局有效。
这里重点介绍小而美的第二种方法:
第一步,缓存你的改动:
git stash save "Commit msg of your stash"
第二步,查看你的缓存列表,看看是否成功:
git stash list
正常可以看见你自己已保存的缓存列表
第三步,此时你已经缓存了之前的修改到本地了。处理完其他的事,还想继续完成此项工作的话可以直接运用stash,弹出之前的修改:
git stash apply stash{xxx}(备注:xxx是数字,表示的是第几个缓存!比如可以运用git stash apply stash{2} )把美摄960FPS慢动作的未完善的提交给弹出来继续填,当然也可以直接删除某个stash, 运行git stash drop stash{xxx}
3. 平常需要查找一个提交,只是大概记得名称又需要定位什么时候提交的,怎么定位呢?也许你可以在grreit上直接搜索关键词,肯定也可以找到的。但是我要说的是其他方法,比如我们想查看下48M超高清的相关提交:
gitlog |grep 48M
咦,为什么他的git log那么好看, 我的丑的一逼呢?! 别着急,我就是设置了一个alias,你也可以的。 alias gitlog alias gitlog='git log --graph --pretty=format:'\''%Cred%h%Creset -%C(yellow)%d%Creset (%cd%Creset) -%Cblue %an%Creset %Cgreen%s%Creset'\'' --date=short'
说到alias,其实自己还可以设置一大堆,简洁又好记!另外,gitlog -n 5 可以显示当前最新的5条提交,有时候git reset --hard时比commit id简便
4. 我已经提交了但是代码review的时候发现有点小问题,需要重新修改调整下咋办哦?
这里分两种情况:
1.只是在原有改动的基础上,新增修改或者调整小部分修改;这种情况最简单了,直接改动后重新git add XXX,然后git commit --amend提交就行了
2.多提交了某些不必要的其他东西,现在希望去掉;这种情况麻烦些,也有很多办法解决,比如可以git reset --soft [上一笔提交的commit id]回到上一笔提交的修改状态,此时你本地就是你之前的提交add状态,再使用git reset HEAD XXX 把需要去掉的文件reset到没有add状态,最后git checkout XXX后重新git commit然后填写一遍信息就行了。
5.提交遇到冲突了怎么办?
方法一:
- git reset --hard FETCH_HEAD 回退
- git clean -fd 要是有修改的先
- git check .
方法二先git fetch在冲突文件中把冲突部分删除后继续操作:
- git status
- git add .
- git cherry-pick --continue
- git commit --amend
- git push origin HEAD:refs/for/冲突分支
6.想打个文件补丁,也就是我们所说的patch文件怎么操作呢?
git diff --文件名1 > 文件名2.patch 将文件1打成补丁文件2
7.Git其他骚操作,常用:
git reset --hard HEAD~1 //回退前一笔提交
git checkout . //清除所有修改
git clean -df //彻底清除仓修改
git reset HEAD . //可以把当前git add 的完全撤销
git reset HEAD XXXX/xxxx.c //对某文件进行撤销
git reset --hard HEDA……(……表示倒V符号) //倒退版本
git add +文件路径 //只提交文件夹下的修改
git add -A +文件路径 //提交文件夹下的所有修改,包括增加和删除