如果我不說奇技淫巧,你們估計就不點進來了
Git作為當今最流行的分佈式的代碼版本管理系統,它的出現改變了軟件開發流程,大大地提高了開發流暢度。
使用Git也有一段時間了,一直都只是使用一些最最基本的幾個命令,對於不復雜的代碼工程來說,我覺得已經夠用了。
命令別名
平時不太用GUI,都是在IDEA中直接敲命令進行相關操作,覺得命令行相對於GUI來說效率還是要高一些,一開始老老實實的敲完整的命令,比如
1、git checkout dev
2、git status
3、git commit -m '某次提交'
後來才發現,Git有別名這一功能,通過下面幾個命令可以把比較長的命令使用簡短兩個字母代替。
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.st status
然後就可以愉快的敲 git st 來查看當前狀態了,除了這種簡單的替換,還可以進行復雜的替換,比如要顯示一個牛逼的提交記錄,可以把lg替換成很長的一段命令組合,如下:
$ git config --global alias.lg log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%Creset' --abbrev-commit
大家可以感受一下,這是原生的git log
下面是git lg,是不是高大上了很多,還有很多組合命令可以去挖掘
如何放棄本地修改
這個功能平時用的還是比較多的,經常功能加了之後發現並沒什麼卵用,需要放棄這些修改,不過這也分為好幾種情況。
1、未進行add操作
這種情況,應該是最常見的,一般修改不會輕易進行git add <file>操作,這個時候只需要進行簡單的 git co -- . 全部或者 git co -- <file> 恢復具體的文件。/<file>/<file>
命令中的--很重要,沒有--,就可能變成 "分支切換" 的命令,但是如果沒寫--,且沒有對應的分支,也可以恢復,為了保險,還是老老實實加上。
該命令就是用來放棄那些還未加入緩存區的修改操作,包括文件內容的修改和文件的刪除,但是對於那些新建的文件來說,並不把它刪掉,因為剛新建的文件對於Git來說是未知的,需要手動的刪除。
2、已經被add進緩存
好吧,這種情況,我也是經常遇到,因為手速太快,執行完git add . 之後,發現一些有問題,怎麼辦?
因為這些修改已經被放入緩存區了,git co 操作已經無力迴天,這個時候,可以使用 git reset HEAD <file> 命令來放棄指定的文件的緩存,如果要放棄所有修改的緩存,可以使用 git reset HEAD ./<file>
該命令相當於撤銷 git add 的影響,在執行該命令後,本地的修改並不會消失,而是回到add之前的狀態。
3、add完之後,還commit了
這種情況最糟心,還好沒有push到遠程倉庫,還可以搶救。其實方法也很簡單,可以使用 git reset --hard HEAD^ 來回退到上一次commit的狀態。
另外使用此命令可以回退到任意版本:git reset --hard commitid
這裡的commitId就是使用 git log 顯示的提交歷史中的SHA碼,只需要前面幾位即可。
如何合併分支
通常我們會在一個新建分支進行相關功能的開發,比如執行 git co -br dev 創建一個dev分支進行開發。
一個功能迭代開發了一週,測試通過之後,需要合併回mater分支,這個時候master分支可能已經合併了一些其他小夥伴的代碼,這個時候的Git可能下面這個情況
下面是SourceTree上的顯示結構
需要把dev分支的代碼合併到master上,可以有兩種方法
git merge dev
git rebase dev
如果是執行 git merge dev ,效果如下
merge命令會留下dev分支,卻在合併的地方多了一個merge節點。
如果是執行git rebase dev-0,會發生什麼?我們再試試
因為測試,重新創建了dev-0分支,通過rebase的合併,發現dev-0的commit信息很自然被整合到了mater分支中,好像dev-0分支從來沒有存在過一樣,整個分支也很乾淨。
刪除遠程分支
有時候可能一不小心,把本地的開發分支會push到了遠程倉庫,雖然沒什麼大礙,對應有分支潔癖的同學可能不能接受,怎麼辦,刪除之。
對於本地分支,可以痛快的執行 git br -d dev 命令進行刪除,遠程分支就沒這個簡單了,不過命令還是有的,只是不太好記。
git push origin :<branch-name>
/<branch-name>
推送一個空分支到遠程分支,相當於刪除了遠程分支,在v1.7.0 之後,可以使用下面這種語法進行刪除
// 1.7.0之後
git push origin --delete <branch-name>
/<branch-name>
tag相關
一般在發佈一個版本的時候,會打一個對應的版本號。
git tag 1.1.8
那麼,tag有什麼好處?
比如,目前組件已經迭代到了版本2.0.5,業務卻拿著1.1.8的版本,諮詢哪哪哪有問題,這個時候就可以快速的執行 git co 1.1.8 命令定位到1.1.8版本發佈時的代碼,並進行相關問題的查看。
其它的一些技巧
1、git add -p
之前在執行git add時,可能把並不想提交的一些文件(測試文件)給add到緩存了,如果添加了 -p ,可以一個一個提示你進行add,並提示變更的內容,簡直無比的貼心。
其它一些高級技能,平時也沒怎麼用過,如果有其它的一些技巧,歡迎推薦。
最後
獻上一張圖,已經忘記當時是哪裡找到的
閱讀更多 程序猿的內心獨白 的文章