開發中關於Git那些事 Git Rebasing

2022-02-02 02:45:19 字數 4053 閱讀 7452

1.1 修改預設編輯器

預設使用vim編輯器,當然可以使用core.editor修改

git config --global core.editor emacs
1.2 修改log分頁

預設使用less,可以使用core.pager來設定為more或則其他,也可以使用空字串,關閉分頁,一次性載入所有內容

git config --global core.pager ''
1.3 git 中的著色
git config --global color.ui false
其實如果想具體到某些特定命令,都是有true、false 或 always可以設定的,比如以下

color.branch

color.diff

color.interactive

color.status

以上每個配置項都有子選項,它們可以被用來覆蓋其父設定,以達到為輸出的各個部分著色的目的。例如,為了讓 diff 的輸出資訊以藍色前景、黑色背景和粗體顯示,你可以執行

git config --global color.diff.meta "blue black bold"
你能設定的顏色有:normal、black、red、green、yellow、blue、magenta、cyan 或 white。正如以 上例子設定的粗體屬性,想要設定字型屬性的話,可以選擇包括:bold、dim、ul(下劃線)、blink 、reverse(交換前景色和背景色)。

git branch -v該命令顯示本地分支最後一次提交說明

* dev    cdc7241a fixbug

master f586f6b5 ****

如果需要顯示本地和遠端,加上-a即git branch -v -a

* dev                   cdc7241a fixbug

master f586f6b5 ****

remotes/origin/head -> origin/master

remotes/origin/dev cdc7241a fixbug

remotes/origin/master f586f6b5 ****

remotes/origin/oldim 97d131bb 2.5.1 封版

git branch -vv除了具有git branch -v命令的作用,還可以顯示出每乙個分支正在跟蹤哪個遠端分支,以及本地分支與遠端分支是否是領先、落後。同樣,如果想看遠端加上-a,也就是all(所有),反正我就是這麼記憶的

* dev    6512ef90 [origin/dev: ahead 1] test

master 78b4b30a [origin/master] 171227122 2.12.2 封版

實用舉例1

其實在git當中整合兩個分支的方式除了merge,還有一種方式,那就是rebase。如上圖,現在要合併c3和c4,如果使用merge合併是這樣子的。它會把兩個分支的最新快照(c3 和 c4)以及二者最近的共同祖先(c2)進行三方合併,合併的結果是生成乙個新的快照(並提交)。

此時,c4' 指向的快照就和上面使用merge命令的例子中 c5 指向的快照一模一樣了。這兩種整合方法的最終結果沒有任何區別,但是變基使得提交歷史更加整潔。你在檢視乙個經過變基的分支的歷史記錄時會發現,儘管實際的開發工作是並行的,但它們看上去就像是先後序列的一樣,提交歷史是一條直線沒有分叉。

實用舉例2

直接看下圖,現在我有這樣的需求,就是將c8,c9提交到主分支,但是不要c3,你如何做?

其實辦法總是有的,在前篇文章中,有講到git stash命令,其實,我們可以在client分支找到c3的雜湊值直接執行git reset 雜湊值(c3)然後把c8,c9的修改直接git stash 貯存起來,切換到master分支,來個git stash pop搞定,不過這樣相當於重新提交,如果commit比較多,會丟失commit日誌,比如這裡這樣操作就會把c8,c9的commit提交資訊丟失。現在我們使用變基來操作,感受下變基的魔性。

現在可以快進合併 master 分支了。

實用舉例3

再舉乙個例子,也是關於git rebase --onto的使用

h---i---j topicb

/e---f---g topica

/a---b---c---d master

git rebase --onto master topica topicb

h'--i'--j' topicb

/| e---f---g topica

|/a---b---c---d master

this is useful when topicb does not depend on topica.

這樣的例子好多,感興趣可以使用git rebase --help檢視。

注意事項

這點一定要看,不要對在你的倉庫外還有副本的分支執行變基。也就是說,乙個人開發隨便搞,多人開發有原則的搞。如果你不遵循這個原則,多人開發出現問題別來找我。

為什麼呢?假如有個人在本地使用了merge合併分支後,push到了遠端伺服器,後來他感覺不爽,想通過變基處理,恰是這個時候你pull了伺服器的**,那就會出現問題。問題就是,以後看記錄會出現相同的提交,本來張三想丟棄的東西被你保留了。如果想看詳細舉例,推薦檢視pro git這本書中關於git變基一節。

總之,只要是你的**和你建立的分支,還沒有執行push之前,隨意搞,push後就不要再想著使用變基了,避免出問題。如果你更喜歡merge,喜歡看git實際發生的事,那就使用merge吧。反之,你更喜歡流水線一樣的記錄,從前到後,沒有一堆堆複雜的合併,那就用rebase。

github desktop

tortoisegit

gitup

......

我比較喜歡gitup,簡潔些。但是我仍舊在使用命令列,就當為了給電腦省空間吧。

開發那些事

記錄下想法。對於軟體開發,絕大多數情況下,乙個優秀的專案,離不開乙個優秀的團隊。軟體開發的流程會很大程度上決定開發的效率。很大一部分也和企業文化 團隊氣氛有關。我說下自己的體會。嚴謹的開發流程,詳細文件還有積極的溝通是至關重要的。1.專案管理工具。團隊需要乙個內部wiki或者專案管理工具開記錄工作報...

iOS開發那些事 Git在Xcode中的配置與使用

很多git命令都是在命令列下執行的,命令列下管理git有很多優點不用多說。但最大的缺點是要求使用者記住這些命令。因此git圖形介面還是很受一 些使用者歡迎的,其中xcode作為整合開發環境工具,也提供了一定git圖形介面功能。但是要想在xcode中使用git管理工程 還想需要進行一些配 置,然後才能...

iOS開發關於 框架 的那些事

在 ios 8 之前,ios 只支援以靜態庫的方式來使用第三方的 與靜態相對應的當然是動態。我們每天使用的 ios 系統的框架是以 framework 結尾的,它們就是動態框架。ios 8 之前也有一些第三方庫提供 framework 檔案,但是它們實質上都是靜態庫,只不過通過一些方法進行了包裝,相...