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 本地新建分支並和遠程分支關聯。