關於工做中Git相關的總結

  來公司一週多,主要是在熟悉各類環境和流程,而做爲研發來說,git的使用也是必不可少的。之前使用方式單一,幾我的對着master,pull和push,來了以後發現其實在平常的開發中,git能夠很方便的幫咱們進行分工和合並,這裏總結一些平時可能會用到的命令和要點:git

 

1. 開發模式:服務器

  也瞭解過,其實部門內部基本上都是分支開發的模式,不多有人作主幹開發,這樣的好處也是能夠保證主幹的可持續發佈(主幹好像是被髮布服務Odin接管了)。那如今基本的開發模式(對於我這個單用戶來講),是這樣的:ide

  可能有些麻煩,可是這樣能夠保證每次dev更新能夠及時合併到本地,而且加了本地dev就不須要遠端merge以後馬上拉最新的代碼。固然遠端會有不少分支,以後開發的版本多了,功能多了,這個圖還會再作調成,本地可能也會多一些分支作不一樣的模塊修改。工具

 

2. 基本命令fetch

  pull:這個是遠程倉庫拉取數據到本地倉庫,就是爲了和遠程倉庫所匹配
  commit:當咱們想要把本身的代碼想要提交到遠程的時候,所用的命令行語句,因爲咱們修改所在的區域在暫存區
  咱們首先要把本身的代碼commit(提交)到本地倉庫,而後在從本地倉庫push到遠程倉庫,可是切記住一點,咱們若是每一次在commit的時候,咱們都須要先從線上pull最新的代碼到本地倉庫,而後在把暫存區裏面的代碼提交到本地倉庫,這個時候若是沒有衝突當然是最好的,若是有了衝突,這我須要解決衝突,這個此時本地倉庫已是最新的代碼
且又包括暫存區上面的代碼了。
  push:這個就是咱們前面把代碼提交到了本地,若是咱們須要提交到遠程服務器上,須要把代碼push到遠程的分支裏面。( git push origin local_branch:remote_branch
  merge:若是有兩個分支裏面的代碼在同一個區域中(兩個同時隸屬於暫存區,或本地倉庫,或遠程倉庫),這個時候須要把這個兩個分區合併。
 
補充:
  每次本身的代碼更新以後,晚上最好都推到本身的分支上去,及時更新!
  遠程分支就是本地分支push到服務器上的時候產生的。好比master就是一個最典型的遠程分支(默認)。

 

3. Git查看、刪除遠程分支idea

查看遠程分支
  加上-a參數能夠查看遠程分支,遠程分支會用紅色表示出來(若是你開了顏色支持的話):
$ git branch -aspa

刪除遠程分支
在Git v1.7.0 以後,可使用這種語法刪除遠程分支:
$ git push origin --delete <branchName>命令行

 

不然,可使用這種語法,推送一個空分支到遠程分支,其實就至關於刪除遠程分支:
git push origin :<branchName>設計

 

兩種語法做用徹底相同。

指針

4. git log命令

   git log --graph --decorate --oneline --simplify-by-decoration --all
說明:
  --decorate 標記會讓git log顯示每一個commit的引用(如:分支、tag等) 
  --oneline 一行顯示
  --simplify-by-decoration 只顯示被branch或tag引用的commit
  --all 表示顯示全部的branch,這裏也能夠選擇,好比我指向顯示分支ABC的關係,則將--all替換爲branchA branchB branchC
  
  這個能夠很清楚的顯示,固然這兩天用了idea查看發現IDE顯示的更清晰。。
 
5. git 對比兩個版本之間差別

  好比咱們有 2 個分支:master, dev,如今想查看這兩個 branch 的區別,有如下幾種方式:

  - 查看 dev 有,而 master 中沒有的:git log dev ^master
  - 同理查看 master 中有,而 dev 中沒有的內容:git log master ^dev

  - 查看 dev 中比 master 中多提交了哪些內容: git log master..dev
  - 不知道誰提交的多誰提交的少,單純想知道有什麼不同: git log dev...master
 
  - 在上述狀況下,再顯示出每一個提交是在哪一個分支上: git log --left-right dev...master
 
6. git merge 和 git rebase 
  以前知道git pull 等於 git fetch + git merge,可是今天看到rebase的命令,仍是和merge很像的,兩個都是用來合併兩個分支用的,在使用過程當中,這兩個概念容易混淆。
  而後這篇博文寫的很清楚:http://www.jianshu.com/p/c17472d704a0
  可是其實開發中我主要仍是用的merge,仍是要深入理解下吧。

 

7. git reset --hard,--soft,--mixed

reset命令作的事情就是重置HEAD(當前分支的版本頂端)到另一個commit。

舉例:

(F)
A-B-C ↑ master

a. 輸入git reset --hard,結果會變成:

(F)
A-B ↑ master

 C 狀態完全沒有,再也找不回來。因此,沒事不要用這個命令。

b. 輸入了git reset --soft,結果是:

(F)
A-B-C ↑ master

文件狀態與分支的指針都指向上一個提交,C 仍是在的,只是沒顯示。

c. 輸入 git reset --mixed,結果是:

(F)
A-B-C ↑ master

分支指針指向上次提交點,可是文件狀態仍是在當前文件 C ,我看到的現象就是 C 文件還在,可是沒有 add ,是紅色的。 
能夠看出,三個命令中 mixed 是最好的回退處理方式,其實這也是 git reset 的默認參數。

 

8. git stash ,git stash pop 

  git stash 可用來暫存當前正在進行的工做, 好比想pull 最新代碼, 又不想加新commit, 或者另一種狀況,爲了fix 一個緊急的bug,  先stash, 使返回到本身上一個commit, 改完bug以後再stash pop, 繼續原來的工做。

寫在最後:其實慢慢發現git是個設計很是有意思而且東西不少的工具,本身瞭解的仍是很淺顯,這只是做爲本身的一個命令收錄吧,以後用到其餘的會不斷更新。

相關文章
相關標籤/搜索