10年程序員告訴你,在Git使用中的一些奇技淫巧!

10年程序員告訴你,在Git使用中的一些奇技淫巧!

如果我不說奇技淫巧,你們估計就不點進來了

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

10年程序員告訴你,在Git使用中的一些奇技淫巧!

下面是git lg,是不是高大上了很多,還有很多組合命令可以去挖掘

10年程序員告訴你,在Git使用中的一些奇技淫巧!

如何放棄本地修改

這個功能平時用的還是比較多的,經常功能加了之後發現並沒什麼卵用,需要放棄這些修改,不過這也分為好幾種情況。

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可能下面這個情況

10年程序員告訴你,在Git使用中的一些奇技淫巧!

下面是SourceTree上的顯示結構

10年程序員告訴你,在Git使用中的一些奇技淫巧!

需要把dev分支的代碼合併到master上,可以有兩種方法

git merge dev
git rebase dev

如果是執行 git merge dev ,效果如下

10年程序員告訴你,在Git使用中的一些奇技淫巧!

merge命令會留下dev分支,卻在合併的地方多了一個merge節點。

如果是執行git rebase dev-0,會發生什麼?我們再試試

10年程序員告訴你,在Git使用中的一些奇技淫巧!

因為測試,重新創建了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,並提示變更的內容,簡直無比的貼心。

其它一些高級技能,平時也沒怎麼用過,如果有其它的一些技巧,歡迎推薦。

最後

獻上一張圖,已經忘記當時是哪裡找到的

10年程序員告訴你,在Git使用中的一些奇技淫巧!


分享到:


相關文章: