Git經常使用命令

Git 經常使用命令速查表(三)

git clone 收取項目歷史的全部數據(每個文件的每個版本),凡是服務器上有的數據,克隆以後本地也都有了。
其中包含一個.git的目錄,用於保存下載下來的全部版本記錄。而後從中取出項目最新版本的全部文件拷貝放在與
.git並列的文件夾下




git init 對現有的某個項目開始用Git管理
表示在當前目錄(文件夾)下建立了一個.git的隱藏目錄,這個就是所謂的Git本地倉庫,全部 Git 須要的數據和資源都存放在這個目錄中。
git初始化以後,當前文件夾稱之爲work tree(工做樹)。
 


git add . 將當前目錄下的全部文件歸入版本控制
將工做樹中增長或修改的一些文檔 生成快照存至Git本地倉庫的一個暫存區stage中(
稱該區域爲索引index
,而且變成Git本地倉庫可以識別的數據格式。
add 與後面的」.」是有一個空格的,這個」.」表示全部的文檔。若是隻生成一個文檔,則將」.」改成「相對路徑/文檔名」便可。
git add examples/ex_ssdata.cpp 
新增長的文件是「Untracked files」,處於未跟蹤狀態;未跟蹤的文件意味着Git在以前的快照(提交)中沒有這些文件。
Git 不會自動將之歸入跟蹤範圍,除非你使用「git add」明明白白地告訴它「我須要跟蹤該文件」。
 

 
git status 檢查當前文件狀態
     工做目錄下面的全部文件都不外乎這兩種狀態:已跟蹤或未跟蹤。已跟蹤的文件是指原本就被歸入版本控制管理的文件,在上次快照中有它們的記錄,工做一段時間後,它們的狀態多是未更新(unmodified),已修改(modified)或者已放入暫存區。而全部其餘文件都屬於未跟蹤文件。它們既沒有上次更新時的快照,也不在當前的暫存區域。
通常有如下幾種狀態:
  1. Untracked files:新建立的文件,尚未執行git add
  2. Changes not staged for commit:已跟蹤的(或者曾經git add過的)文件修改以後,尚未執行git add進行暫存
  3. Changes to be committed:已經執行過git add,已暫存,下次將要被一塊兒提交的文件


 
git diff                     查看修改以後尚未暫存起來的文件和暫存區域快照之間的差別
git diff --cached     查看已經暫存起來的文件和上次提交時的快照之間的差別
git log #能夠查看每次commit的改變
git diff #能夠查看最近一次改變的內容,加上參數能夠看其它的改變並互相比較
git show #能夠看某次的變動
 


git commit 將暫存區域的文件一塊兒提交,完成歸入操做
git add操做至關於把紙放入打印機;git commit至關於紙放進去以後要把門推動去合上,這樣打印機才能工做!
每次準備提交前,都必須先用git status看看哪些修改過的或新建的文件尚未git add過,不然提交的時候不會記錄這些還沒暫存起來的變化!!
git commit -m "版本更新信息說明"

git status看看哪些git add
# 也能夠將git add與git commit用一個指令完成
# git commit加上-a選項,Git就會自動把全部已經跟蹤過的文件暫存起來一併提交,從而跳過git add步驟。 git commit -a -m "msg"# git commit-agit add
 
git commit -am "add ex_ssdata.cpp"
將快照/索引中的內容提交到Git本地版本庫中。Git的每次更新都須要提交一次。


 
.gitignore 文檔忽略
在本地Git倉庫的根目錄建立一個名爲.gitignore的文件,將工做樹中你不但願接受Git管理的文檔的文件模式寫到.gitignore 文件中。
一般都是些IDE配置文件或者自動生成的文件,好比日誌文件,或者編譯過程當中建立的臨時文件等。
.gitignore
vim .gitignore
# Atom
.clang_complete
.atom*.json
.atom*.cson
 

 
git rm  從工做目錄中刪除指定的文件,同時從已跟蹤文件清單中移除(確切地說,是從暫存區域移除)。
刪除以後,必須執行 git commit,將刪除該文件的操做提交上去。
 
單純用ubuntu命令 rm來刪除文件的話,僅僅是刪除了物理文件,並無將其從 git 的記錄中剔除。
對於用  rm 命令直接刪除的文件,也能夠再經過  git rm 命令從新將該文件從 git 的記錄中刪除掉,不能經過git add剔除。
由於git add . 僅能記錄添加、改動的動做,刪除的動做需靠  git rm 來完成。
  1. 即經過:rm + git rm + git commit  -m "abc"的方式記錄刪除動做!
  2. 還能夠經過:rm + git commit  -am "abc"的方式記錄刪除動做!
 
好比一些大型日誌文件或者一堆編譯文件以及編譯配置文件等,這些文件是必要的,因此要移除跟蹤但不刪除文件。
移除以後,必定要在 文件中補上這些文件條目。git rm --cached 把文件從Git倉庫中刪除(亦即從暫存區域移除),但仍然保留在當前工做目錄中。移除跟蹤但不刪除文件。
.a.gitignore

git rm log/\*.log
git rm \*~ 
加反斜槓\表示遞歸刪除指定目錄及其子目錄中全部匹配的文件\表示遞歸刪除指定目錄及其子目錄中全部匹配的文件
 
git checkout -- test.txt 把誤刪的文件test.txt用版本庫裏的文件恢復到最新版本
實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。
若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。
git checkout -- test.txt 把誤刪的文件test.txt用版本庫裏的文件恢復到最新版本
實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。
若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。
git checkout -- test.txt 把誤刪的文件test.txt用版本庫裏的文件恢復到最新版本
實際上是用版本庫裏的版本替換工做區的版本,不管工做區是修改仍是刪除,均可以「一鍵還原」。
若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。


 
git mv file_from file_to 在Git中重命名某個文件
倉庫中存儲的元數據並不會體現出這是一次更名操做,即不須要經過git add來進行暫存!


 
git log 不加任何參數,會按提交時間列出全部的更新,最近的更新排在最上面。

p 按補丁格式顯示每一個更新之間的差別。     -
--stat 顯示每次更新的文件修改統計信息。
    --shortstat 只顯示 --stat 中最後的行數修改添加移除統計。
    --name-only 僅在提交信息後顯示已修改的文件清單。
    --name-status 顯示新增、修改、刪除的文件清單。
    --abbrev-commit 僅顯示 SHA-1 的前幾個字符,而非全部的 40 個字符。
    --relative-date 使用較短的相對時間顯示(好比,「2 weeks ago」)。
    --graph 顯示 ASCII 圖形表示的分支合併歷史。
    --pretty 使用其餘格式顯示歷史提交信息。可用的選項包括 oneline,short,full,fuller 和 format(後跟指定格式)。
 
  
     -(n) 僅顯示最近的 n 條提交
    --since, --after 僅顯示指定時間以後的提交。
    --until, --before 僅顯示指定時間以前的提交。
    --author 僅顯示指定做者相關的提交。
    --committer 僅顯示指定提交者相關的提交。


 
 
撤銷操做:
git commit --amend                            

修改最後一次提交

取消已經暫存的文件git reset HEAD benchmarks.rb
取消對文件的修改git checkout -- benchmarks.rb
這條命令有些危險,全部對文件的修改都沒有了,由於該操做是把以前版本的文件複製過來重寫了此文件。
 


遠程倉庫操做:
git remote            查看當前配置有哪些遠程倉庫
git remote add origin git@github.com:fuleying/git-download.git  爲遠程倉庫增長一個別名
git remote -v  --verbose的簡寫,顯示遠程倉庫對應的克隆地址
git remote show [remote-name]      查看某個遠程倉庫的詳細信息
--verbosegit remote show [remote-name]
git remote rename  from  to                     命令修改某個遠程倉庫 在本地的簡稱
git remote rm 
[remote-name]          移除遠端倉庫的別名


 

分支:分支所有都是本地分支。當你在使用分支及合併的時候,一切都是在你本身的Git倉庫中進行的,徹底不涉及與服務器的交互。

1.新建分支(名爲local),僅僅是創建了一個新的分支,但不會自動切換到這個分支中去。
從當前分支(默認HEAD處)分化出一個新的分支並切換到該分支git branch local 從當前分支(默認HEAD處)分化出一個新的分支
git checkout -b local
git checkout -b local
git branch local [遠程名/分支名] 從指定分支處分化出一個新的分支
git checkout -b local [
git branch local [遠程名/分支名] 從指定分支處分化出一個新的分支
git checkout -b local [
git checkout -b local [
遠程名/分支名遠程名/分支名遠程名/分支名遠程名/分支名遠程名/分支名
從指定分支處分化出一個新的分支並切換到該分支

2.查看存在多少分支[-a也顯示遠程倉庫分支]

$ git branch [-a]
    local
    * master  字符表示當前所在的分支*
查看遠程分支remote,用  的形式表示遠程分支。

遠程分支(remote branch)是對遠程倉庫中的分支的索引。一次Git clone,會自動爲你將此遠程倉庫命名爲,並下載其中全部的數據,創建一個指向它的分支的指針,在本地命名爲,但你沒法在本地更改其數據。
接着,Git創建一個屬於你本身的本地分支,始於上 分支相同的位置,你能夠就此開始工做。
能夠運行來同步遠程服務器上的數據到本地。該命令首先找到是哪一個服務器,而後從上面獲取你還沒有擁有的數據,更新你本地的數據庫,而後把的指針移到它最新的位置上。

git branch -v
查看各個分支最後一個提交對象的信息verbose
 查看哪些分支已被併入當前分支。
列表中沒有的分支一般均可以用來刪掉,由於已經把它們所包含的工做整合到了其餘分支,刪掉也不會損失什麼。
git branch -r

git branch -r
(遠程倉庫名)/(分支名)originmasterorigin/mastermasteroriginmaster
git fetch originoriginorigin/mastergit branch --merge*git branch -d
git branch --no-merged 查看還沒有合併的分支
 

3.切換到分支/主文件夾

$ git checkout local

 

4.分支的合併

$ git checkout master # 將當前分支切換爲master
$ git merge local # 將local分支合併當前分支master上

第一種合併狀況:若是順着一個分支走下去能夠到達另外一個分支的話,那麼Git在合併二者時,只會簡單地把指針右移,稱爲快進(Fast forward)。
第二種合併狀況:
若是是兩個分叉的分支進行合併,Git會用兩個分支的末端(C4和C5)以及它們的共同祖先(C2)進行一次簡單的三方合併計算。Git沒有簡單地把分支指針右移,而是對三方合併後的結果從新作一個新的快照,並自動建立一個指向它的提交對象(C6)(見圖 3-17)。這個提交對象比較特殊,它有兩個祖先(C4 和 C5)。

第三種合併狀況:
若是在不一樣的分支中都修改了同一個文件的同一部分,Git就沒法乾淨地把二者合到一塊兒。Git做了合併,但沒有提交,它會停下來等你解決衝突。要看看哪些文件在合併時發生衝突,能夠git status查閱。任何包含未解決衝突的文件都會以未合併(unmerged)的狀態列出。

 

5.分支衍合:把在一個分支裏提交的改變移到另外一個分支裏重放一遍。

$ git rebase
雖然會跟merge合併操做獲得的結果沒有任何區別,但衍合能產生一個更爲整潔的提交歷史,彷彿全部修改都是在一根線上前後進行的。

6.刪除分支,通常是合併以後將重複的分支刪除

$ git branch -d local


 
git pull:從遠端倉庫取回版本更新
  • pull指令其實包含了fetch(將變動複製回來)以及merge(合併)操做兩個步驟!
  • git push:可將本地版本更新推送到遠端倉庫中。
    # 將github(遠程)的git檔案與本地的同步(即更新本地端的repo)
    push命令只能將代碼push到你本身的分支上。

 

push 提交(這裏提交的方式是使用http的方式,也有ssh的提交方法,這裏面就不作介紹了)html

git remote add origin https://github.com/username/Hello-World.git  git

(其中的https://github.com/username/Hello-World.git,是該項目的http,這能夠在網頁上獲得,複製過來便可)github

以後會要求輸入用戶名和密碼數據庫

提交的命令是:json

git push origin masterubuntu

相關文章
相關標籤/搜索