前言:本文不過多介紹Git的基本命令匀们,主要記錄一些經(jīng)常遇到的使用場景谱秽。
一暇赤、Alias命令
- 場景:通過這個Linux命令配置終端文件之后,就可以通過簡寫提高工作效率吕嘀,程序猿還是要學(xué)會偷懶才行违寞。
alias g="git"
alias gb="git branch"
alias gch="git checkout"
alias gcm="git commit -m"
alias gc="git clone"
alias gamend="git commit --amend -C HEAD"
alias gst="git status"
二、將分支推送到遠(yuǎn)端
- 場景一:假設(shè)現(xiàn)在所在的分支是develop偶房,指定推送到遠(yuǎn)端分支origin-develop
git push origin develop:origin-develop
- 場景二:如果要覆蓋遠(yuǎn)程分支origin-develop,通過參數(shù)-f
git push -f develop:origin-develop
三军浆、追加更新到某個之前的 commit
- 場景:經(jīng)常有這種情況棕洋,剛commit的更新發(fā)現(xiàn)還有不足,包括一些新增加調(diào)整修復(fù)乒融,但是覺得提交兩個commit又非常蛋疼掰盘,就可以用這種辦法解決。
git add 更新修改的文件
git commit --amend -C HEAD 或者 gamend
四赞季、查找相關(guān)文件的commit提交
- 場景:有時候需要查看某個文件在哪些commit中進(jìn)行了修改愧捕。
//方法一:
git log 查找文件
git show commit_id
//方法二:
git log --follow filename(文件絕對路徑)
五、刪除某些 commit
- 場景:有時候添加了一些垃圾文件或者錯誤代碼但是已經(jīng)commit了申钩,這時候就可以把通過命令將其刪除次绘。
git rebase -i HEAD~5(數(shù)字5只是樣例, 進(jìn)入vim編輯模式顯示最近5次commit)
執(zhí)行完命令之后會出來5行,如果你要修改哪個,就把對應(yīng)的pick改成edit撒遣,保存退出邮偎。 這時通過git log你可以發(fā)現(xiàn),git的最后一次提交已經(jīng)變成你選的那個.
1 pick bfab1a3 message
2 pick 87c23fd message
3 pick 731a5be message
4 pick 9049799 message
5 pick 67dd0ae message
六义黎、追加修改到之前某個 commit
- 場景:有時候?qū)懼鴮懼l(fā)現(xiàn)之前的某個提交需要追加修改禾进,這時候需要先把當(dāng)前的工作代碼保存,再追加到被修改的那個commit中廉涕。
//如果通過 gst 發(fā)現(xiàn)已經(jīng)有文件被修改泻云,這時候需要把修改暫存起來艇拍。
git stash
//接著找到你需要追加修改的那個commit id,如731a5be
git rebase 731a5be~ -i 或者
git rebase -i HEAD~5 //列出最近5個commit
//在vim中把你需要修改的 commit 前面的 pick改成 edit宠纯,保存卸夕,關(guān)閉vim編輯器,這時候會回到終端征椒,再輸入:
git stash pop
//將緩存的更新拿出來做修改娇哆,再git add .最后git rebase --continue將修改添加到你想添加的commit中。
//注意此時不需要再commit.
git add .
git rebase --continue
七勃救、撤銷上一次 git add . 操作
- 場景:通常是因為忘記添加.gitignore文件碍讨,或者是粗心把一些非必要的文件跟蹤了。
//該命令會 unstage 你上一個 commit 增加的所有文件蒙秒。
git reset
//如果你只想 unstage 某些文件:
git reset --<file 1> <file 2> ... <file n>
八勃黍、查找含有特定關(guān)鍵字的 commit
git log --grep //最基本的用法
//查找一個月以內(nèi)commit log message里含有 flag_one 或者 flag_two的 commits
git log --grep=flag_one--grep=flag_two --since=1.month
//查找指定作者,例如多人開發(fā)的時候查看隊友關(guān)于flag關(guān)鍵字的提交
git log --grep=flag --author=Linus
//查找文件里面含有 flag 和 hello 的文件(不局限于同一行)
git grep -l --all-match -e flag -e hello
九晕讲、創(chuàng)建debug分支修復(fù)bug
- 場景:bug是無處不在的覆获,但是很多時候boss要求必須在短時間內(nèi)修改bug,可是手頭的工作還沒有完成以及提交瓢省,可能需要1天時間弄息,這時候就可以運(yùn)用。
//step 1:將目前的工作代碼緩存起來
git stash
//step 2:假定需要在dev分支上修復(fù)勤婚,就從dev創(chuàng)建臨時分支issue-xxx:
git checkout dev
git checkout -b issue-xxx
//step 3:修改bug 并添加
git add .
//step 4: 修復(fù)完成后摹量,切換到dev分支,并完成合并馒胆,最后刪除issue-xxx
git checkout dev
git merge --no-ff -m "merged bug fix xxx" issue-xxx
git branch -d issue-xxx
//最后:工作現(xiàn)場還在缨称,Git把stash內(nèi)容存在某個地方了,但是需要恢復(fù)一下祝迂。
//有兩個辦法:一是用git stash apply恢復(fù)睦尽,但是恢復(fù)后,stash內(nèi)容并不刪除型雳,你需要用git stash drop來刪除当凡;
git stash apply
git stash drop
//第二種方式是用git stash pop,恢復(fù)的同時把stash內(nèi)容也刪了四啰。
git stash pop
//再用git stash list查看宁玫,就看不到任何stash內(nèi)容了
git stash list
最后
- 以上這些便是我這段時間使用git的一些心得,感謝Linus給我們創(chuàng)造了一個這么完美的工具柑晒。當(dāng)然欧瘪,對于這么強(qiáng)大的工具,我所記錄的也只是冰山一角匙赞,我也需要不斷積累不斷更新佛掖。
- 分享鏈接:一個很不錯的git學(xué)習(xí)網(wǎng)站,網(wǎng)站動畫滿分(翻墻,你懂的) http://learngitbranching.js.org/
- 經(jīng)典書籍《Pro Git》妖碉,還沒來得及看。http://git.oschina.net/progit/