1.现在的工作空间太乱了,工作到一半,临时插需求。如何获得一个干净的工作空间?
git reset --hard HEAD
使用这条命了,会使你的工作区和缓冲区和HEAD保持一致,原来的工作区的修改和缓存区的修改都不会保留,虽然能得到一个干净空间,但是一条很危险的命令。
应该使用git stash
命令将工作区和缓存区的内容储藏起来,当完成临时的需求后,再使用git stash apply
或git stash pop
恢复。
2.从Git历史中删除一个文件,比如有敏感信息(私钥,内网ip等)或者不需要版本控制的超大文件
git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
3.上一个的commit的message打错字了,怎么修改
git commit --amend -m ”Fix bug #42“
如果需要修改更早的commit的信息,怎么做?
git rebase -i [需要更改的commit的父SHA]
在交互式环境下修改。
4.追溯一个指定文件的历史修改记录
git blame [filename]
5.代码有bug,commit很多次了,到底是哪一次修改把bug引入了?
git bisect start [终点SHA] [起点SHA]
git bisect good
标记正确,git bisect bad
标记错误,直到成功找到出问题的那一次提交为止。这时,Git 会给出如下的提示。
XXXX is the first bad commit
6.提交的版本有bug,怎么回退版本。
方法一:使用git revert HEAD
,前提是工作区和暂存区是干净的,新增一次提交,抵消上一次的变化,不会改变历史,首选方式,没有任何丢失代码的风险。
方法二:git reset [SHA]
,丢弃部分提交,默认暂存区清空,工作区不变动,使用了git reset --hard[SHA]
使工作区的文件回到以前的状态。
7.改写代码,发现还是原来的好,还没有commit时,撤销工作区的修改
git checkout -- [filename]
两种情况:
1.修改后还没有被放到暂存区,撤销修改就回到和版本库一模一样的状态。
2.已经添加到暂存区后,撤销修改就回到添加到暂存区后的状态。
8.撤销暂存区已经add的文件
有以下三种方法:
git reset HEAD [filename]
git rm --cached [filename]
git reset [filename]
9.本地有A_branch分支,远程没有A_branch分支
当你在A分支push的时候会报错,同时会有提示:git push --set-upstream origin A_branch,即可以完成远程新建一个A_branch分支,同时也会push上去。
10.远程有B_branch分支,本地没有B_branch分支
第一步:git fetch,获取远程新建的分支;
第二步:git checkout -b B_branch origin/B_branch 本地新建分支并和远程分支关联。