天天看點

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

前言

  本文主要寫給使用指令行來操作Git的使用者,用于提高Git使用的效率。至于使用指令還是GUI(Tortoise Git或VS的Git插件)就不在此讨論了,大家根據自己的的喜好選擇就好。我個人是比較推薦使用指令行的,因為指令行是原生的用戶端,當熟悉了指令行以後,使用效率并不會比GUI低。而且我是從GUI(Tortoise SVN)轉指令行的,剛開始的時候也是吐槽指令行的“非人性化”,但我走出了舒适區,真正使用起指令行後,我才發現了自己之前的想法是膚淺的。

指令别名

  指令别名就是給一些常用的指令設定一個較短的指令别名來提高Git的使用效率。

  如git st(git status):

  

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  使用指令别名,并不會把原指令覆寫掉,而是同時生效:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  指令别名輸錯的時候,也會有提示:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  我在這裡會分享我設定的指令别名,希望能幫助提高使用效率。

  1. 檢視狀态(Show the working tree status) - git status

git st      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  2. 送出(Record changes to the repository) - git commit

git ci      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  3. 分支操作(List, create, or delete branches) - git branch

git br      

   

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  4. 簽出(Switch branches or restore working tree files) - git checkout

git co      

  簽出分支:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

   簽出(還原)工作區檔案:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  簽出(還原)工作區所有檔案:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  5.差異(Show changes between commits, commit and working tree, etc) - git diff

  工作區(working driectory)與暫存區(staging area)的差異:

git df      

  單個檔案差異:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  所有檔案差異:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  暫存區(staging area)與本地倉庫(repository)的差異:

git dfs      

   單個檔案差異:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  多個檔案差異:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  6.合并(Join two or more development histories together) - git merge

git mr      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  7.日志(Show commit logs) - git log

   檢視最近一條日志:

git last      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  檢視日志及分支送出資訊:

git ls      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  其中綠色的表示local分支,紅色的的表示host分支,從上圖可以看出,local的master分支、host的master分支、host的dev分支都處于同一個送出,local的dev分支領先于前面提到的3個分支。當版本顯示不全送出時,可以按回車(回車)繼續加載送出,需要退出是,按字母q。另外,你可以加“-n”指定檢視前n條記錄:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  檢視日志、分支送出資訊、送出人、送出時間:

git lg      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  當版本顯示不全送出時,可以按回車(回車)繼續加載送出,需要退出是,按字母q。另外,你可以加“-n”指定檢視前n條記錄:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  8.變基(Reapply commits on top of another base tip) - git rebase

git rb      
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  我了解的rebase和merge功能上比較類似,隻是rebase操作後,送出基本都會在一條線上,而merge會從一條線合到到另外一條線。

  Merge:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  Rebase:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  9.揀選(Apply the changes introduced by some existing commits) - git cherry-pick 

git cb      

   

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  從圖中看看出,cherry-pick是把某個送出複制過來作為一個新的送出,和merge或者rebase的效果不同,check pick後可以進行merge或rebase操作:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

使用Beyond Compare作為差異比較工具

  指令行自帶的檔案差異比較工具功能比較簡單,用來檢視或對比檔案差異時,可能效果不太好,特别是在解決沖突的時候,但是我們可以內建一些比較強大的差異比較工具,比如本文提到的Beyond Compare。那麼,我們先看一下例子:

  自帶的差異比較效果:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  使用difftool指令調用Beyond Compare的比較效果:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  當然difftool也可以使用指令别名:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  解決合并沖突:

  我們在dev的a.txt檔案中添加“dev”内容,在master分支上添加“master”内容,然後用master分支合并dev。

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  使用mergetool指令調用Beyond Compare合并沖突:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具
Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  由上圖可以看出,左邊是目前分支的版本,右邊的是需要合并的分支的版本,中間的是相同部分的版本,處理沖突的政策大概有以下幾種:

  #1 目前分支版本替換合并分支版本,點選綠色的箭頭。

  #2 合并分支版本替換目前分支版本,點選粉色的箭頭。

  #3 同時需要兩個版本的内容,點選綠色或粉色的箭頭,然後把另外的分支的内容拷貝到下方的文本編輯框。

  #4 隻要相同部分的内容,什麼都不幹。

  #5 其他。

  最後,點選紅色的感歎号,表示已解決沖突。我這裡選擇#3的政策:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  關閉Beyond Compare,完成合并操作。

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

如何配置

  .gitconfig是配置的主要檔案,它一般在C:\Users\{使用者名}目錄中,如果沒有,可以通過以下兩步建立:

  #1 打開指令行工具

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

  #2 執行設定使用者名或者設定郵箱的指令。

  設定使用者名:

git config --global user.name "{your username}"      

  設定郵箱:

git config --global user.email "{your email}"      

  打開.gitconfig檔案,把以下内容拷貝到檔案中,完成指令别名的配置:

  [alias]

  st = status

  ci = commit

  co = checkout

  br = branch

  df = diff

  dft = difftool

  dfs = diff --staged

  dfts = difftool --staged

  mr = merge

  mrt = mergetool

  last = log -1 HEAD

  ls = log --oneline --graph --all --decorate

  lg = log --oneline --graph --all --decorate --pretty=format:"%h%x20%Cgreen%d%x20%Cred%an%x20%C(yellow)%ad%x20%Creset%s" --full-history --date=short

  rb = rebase -i

  cp = cherry-pick

  打開.gitconfig檔案,把以下内容拷貝到檔案中,完成Beyond Compare的配置:

  [diff]

  tool = bc4

  [difftool]

  prompt = true

  [difftool "bc4"]

  cmd = \"D:/Program Files/Beyond Compare 4/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"

  [merge]

  [mergetool]

  [mergetool "bc4"]

  #trustExitCode = true

  cmd = \"D:/Program Files/Beyond Compare 4/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

  最終效果如圖所示:

Git小技巧 - 指令别名及使用Beyond Compare作為差異比較工具

最後

  希望以上分享的小技巧可以提高大家的效率,大家也可以根據自己的需要去設定指令别名,歡迎大家讨論及分享指令别名的使用心得。