git經常使用命令詳解

  git是咱們經常使用的代碼提交工具,可是有不少命令行要記,對於習慣這些命令的新手來講是一件很蛋疼的事,故本人在此記錄了一些經常使用的命令,以供你們參考。若有不對之處,還請各位大蝦多多指正。git

git代碼克隆

1.主模塊代碼拉取

  主模塊拉取的命令很簡單,相信用過git的童鞋都會:github

git clone https://github.com/bendidi/Tracking-with-darkflow.git

2.子模塊代碼拉取

  將主模塊代碼拉取下來之後會發現主體工程代碼目錄下面有一些空目錄,如deep_sort、sort、darkflow,這些子模塊均爲空目錄。緣由是這些目錄均爲submodule,隸屬於第三方的git工程。這是爲了解決不一樣git工程之間可以相互引用,而彼此之間又能保證相互獨立才引入子模塊的概念。拉取子模塊的方法以下:緩存

git submodule update --init --recursive

  若是你細心觀察,你會發現包含子模塊的工程主目錄下都會存在一個.gitmodules(隱藏文件),裏面的內容以下:
[submodule "deep_sort"]安全

path = deep_sort
url = https://github.com/bendidi/deep_sort.git

[submodule "sort"]服務器

path = sort
url = https://github.com/bendidi/sort.git

[submodule "darkflow"]工具

path = darkflow
url = https://github.com/bendidi/darkflow.git

  文件中記錄的子模塊對應的文件名和git路徑,git submodule update --init --recursive就是根據此文件來拉取子模塊工程url

3.同時拉取全部模塊代碼

  看完上面兩步以後,估計不少童鞋內心都有個疑問:
  我拉取個代碼還搞這麼麻煩,有沒有簡單一點的方法,能夠一步到位?
  這位老細你有運了,我這裏恰好有一粒:spa

git clone --recursive https://github.com/bendidi/Tracking-with-darkflow.git
給git clone傳遞--recursive選項,git clone命令會自動初始化並更新倉庫中的每個子模塊。

正常代碼提交流程

  git正常的代碼提交流程能夠分爲如下幾步:命令行

1.文件的增刪改

  1.git add $(filepath)/filename
  在git中增長鬚要增長或者修改的文件名
  2.git rm $(filepath)/filename
  在git中刪除指定文件路徑的文件
  3.git mv filename1 filename2
  修改移動指定文件名
  4.git status
  查看當前代碼提交狀態,可根據提交狀態來校對目前的修改跟預期的提交是否相符。日誌

2.代碼的本地提交

  通過第一步的代碼的增刪改操做後,將進入本地提交環節,提交後代碼將保存在本地,但不會上傳的git服務器,操做命令以下:

git commit

  提交時如須添加修改備註,能夠在git commit -m "備註信息:xx修改",也能夠在git commit後的命令行中添加。
  本地提交以後,有時你會發現,還有其餘的改動忘了提交,怎麼辦呢?
  很簡單,將忘了提交的改動從新走一遍步驟1,而後使用:

git commit --amend

  進行追加提交,便可完成本地補充提交代碼。

3.代碼的遠程服務器提交

  當代碼提交到本地後,就能夠將代碼提交到主幹,命令以下:

git push origin HEAD:refs/for/master

主幹上版本更新後如何合併提交本身的代碼

  按正常提交流流程commit代碼後,若主線版本比本地版本新,直接提交代碼到主線將會報衝突,此時能夠嘗試使用以下方法來解決:

1. git stash

  git stash用於將當前工做區的修改暫存起來,就像堆棧同樣,能夠隨時將某一次緩存的修改再從新應用到當前工做區

2. git pull

  拉取線上最新代碼.

3.git stash pop

  恢復/合併線上代碼和本身的代碼

此時再將代碼提交到主幹將不會報衝突,但新代碼和本身修改的代碼有沒有相互重疊的修改致使不可預測的後果,須要提交者本身檢視代碼來保證。

代碼回退

1.git log
查看最近代碼提交日誌,能夠按上下箭頭瀏覽,內容以下:

clipboard.png

2.git checkout $(committed)

  使用git checkout $(committed)能夠將代碼回退到指定的提交版本

若是代碼回退後須要恢復到當前主線最新版本,可使用:
    git reset --hard origin/master

  將代碼恢復到當前主線最新版本。

reset以後如何恢復到上一次commit點

1.git reflog
使用git reflog查看以前的commit記錄,以下所示:
$ git reflog
b7057a9 HEAD@{0}: reset: moving to b7057a9
98abc5a HEAD@{1}: commit: more stuff added to foo
b7057a9 HEAD@{2}: commit (initial): initial commit

2.git reset --hard 98abc5a
reset完後代碼便可回退到以前提交的版本

reset --hard 和checkout的區別

1.git reset --hard $(committed)
放棄本地修改,將代碼回退到指定commit版本,本地代碼的HEAD也會隨着本次reset的提交點而移動到對應的分支/主線
2.git checkout $(committed)
放棄本地修改,將代碼回退到指定commit版本,本地代碼的HEAD不會隨着checkout的commitid移動。
區別:
1.checkout對工做目錄時安全的,它會經過檢查來確保不會將已更改的文件弄丟。而 reset --hard 則會不作檢查就全面地替換全部東西。
2.使用git reset --hard時HEAD會隨着commit的不一樣而移動,而使用git checkout時HEAD不會隨着commit點的不一樣而移動。
相關文章
相關標籤/搜索