Git進階學習筆記

魯鵬發表於2015-12-23

好久好久之前,入門學習了一下Git,基本上可以使用GitGithubpush自己的程式碼,並且clone一下別人的專案。本以為這就能夠滿足我的日常需求了,但是隨著學習以及使用的複雜性,發現那些基礎的命令不能再滿足我的日常使用了,於是最近在看《pro Git》一書, 希望能更深入的學習一下Git這個工具,工欲善其事,必先利其器。

1. git config配置

剛開始使用Git的時候,很多人肯定都忽略配置的相關內容。也許你還記的在第一次push內容的時候,總會有提示讓你設定你的使用者名稱以及郵箱。其實這就是最基本的一個配置。

git config --list可以檢視目前git倉庫中有哪些配置。那麼另外一個問題來了,Linux中有個觀點是:『一切皆檔案』,這些配置從哪裡來的?共有3個地方設定,分別是系統級的、使用者級的以及倉庫級的。

  1. /etc/gitconfig 系統級的配置,系統中所有的git倉庫都普遍適用的配置。使用git config --system來寫入;如:
    git config --system user.name pengloo53

    注意:配置檔案不一定是/etc/gitconfig,去你的git安裝的目錄下去找。怎麼找?Linux和Mac使用者可以使用which git找到git的所在地,然後就好找了,比如我的git的系統配置檔案在/usr/local/etc/gitconfig下。我的Mac是通過homebrew安裝的git。如果是Windows系統,去安裝目錄下找就OK了。

  2. ~/.gitconifg使用者級的配置,該使用者下所有的git倉庫都普遍適用的配置。使用git config --globe來寫入;如:
    git config --globe user.email aa@xxx.com

  3. .git/config倉庫級的配置,只針對某個倉庫而言的配置。在倉庫目錄下直接git config來寫入配置。

如果我很無聊,分別使用git config --system user.name name_1git config --globe user.name name_2以及git config user.name name_3設定了我的使用者名稱,那麼推送訊息的時候到底記錄的是哪個呢?這裡不用擔心,git會一級一級覆蓋的,也就是會顯示最小範圍的那個級別。如果有相同的配置存在,最終會顯示倉庫級的那個配置。

2. git commit提交

這個命令可真是熟悉得不能再熟悉了,每次git add --all都要習慣性的git commit -m "message"一下,message是一定要寫的,Git預設也是要你寫的,這是個好習慣,一定要堅持下去。反正我都習慣了,不寫-m都覺得奇怪了。

當然保留好的習慣的時候,該偷懶也得偷懶一下。可以嘗試git commit -a -m "message"git add --allgit commit -m 'message"合併一塊寫,我相信你會更爽的。

如果一不小心,message寫成了meaasge,雖然不是啥大事,但是對於一個『強迫症』來說,那叫個難受。沒事,試一下git commit --amend修改提交文字。

再如果commit之前忘了add某些檔案了,想一塊commit進來,沒關係。

git add --all
git commit --amend

這樣就不用產生兩條提交資訊了。

3. git show檢視

在入門的常用命令的筆記裡,通過git show v1.0可以檢視標籤資訊,然而它還可以檢視每次的提交資訊,可能這並不是什麼進階知識,但是對我來說還是比較新鮮的,就記在這裡吧。

當你想檢視之前某個的提交改了些啥玩意的時候,那麼git show就大有用處了。先通過git log --graph --pretty=oneline --abbrev-commit檢視一下自己的分支資訊,然後git show commitID就可以了。當然你不用寫下全部的commitID,寫前4位就行了。

如:git show 0fce,就可以檢視0fce*那次都提交了哪些內容。

4. git remote遠端

在之前,這個命令我基本上沒有怎麼使用過,因為建立的倉庫,除了第一次使用關聯到github上之後,就再也沒咋用了。把本地的倉庫上傳至遠端,基本上會用到如下兩條命令。

git remote add origin https://github.com/XXX/xxx.git
git push -u origin

如果是你一個人玩Git,那麼上面兩條命令真的夠了,很長一段時間我就是一個人玩。但是使用Git版本控制器就註定了你不能再一個人玩下去了,協同處理專案才是版本控制器的真正意義。

git remote -v檢視一下遠端的倉庫,通常情況下,你會看到一個origin這個遠端倉庫,它是預設的遠端倉庫。基本上就是你第一次push or clone的那個倉庫。

情景

假設你在githubfork了一個別人的專案,並且clone下到本地,而且玩了老長時間了,也許你還pull request一下別人的專案,運氣好,別人還merge了你的pull request,然後過了好長時間,你都放棄了這個專案,然而別人還在一直更新,你想看看最新的專案狀態。那麼你可以通過下面幾條命令,再把別人倉庫的內容抓取下來。

git reomte add others https://github.com/xxx/xxx.git
git fetch others master
git checkout -b tmp others/master
  1. 首先新增一下別人的遠端倉庫,命名為others
  2. 然而使用git fetch命令抓取一下遠端倉庫的內容,通過git branch -r,你就可以看到others/master遠端分支了;
  3. 再在本地建立一個tmp分支跟蹤遠端others/master分支。
  4. 最後tmp的處理權就交到你的手裡了,刪除它或者merge到本地master上就看你的心情了。
  5. 最最後別忘了,再把它推送到你的遠端分支上origin/master,使用git push origin master就行了。

5. gitk圖形介面

要是讓我記那麼多git log的引數實在是太讓人為難了,基本上是用的時候現查命令引數,自從知道了gitk,現在連git log都快忘了,這個圖形工具真是太方便了。一目瞭然各個分支都哪個地方。縱使我再崇拜命令列,我還是為了它妥協了。

Windows上就不用安裝了,安裝完git for windows就可以直接使用了。

Mac上如果無法使用gitk命令啟動圖形介面,趕緊點選這裡安裝,不要再猶豫。

Linux,啊,能把Linux當桌面系統使用的使用者都是高手,我這裡就不班門弄斧了。

以上是這段時間對Git學習的一些內容,當作是Git學習的一個進階階段吧。Git博大精深,想深入瞭解還需更多的學習。當然它畢竟只是一個工具,工具只有在使用的時候才能體會到它是否滿足自己的需求,期待下一次進階學習。

轉載儲存: Git | LP's Blog

相關文章