Git 經常使用命令速查表(三)
git clone 收取項目歷史的全部數據(每個文件的每個版本),凡是服務器上有的數據,克隆以後本地也都有了。
其中包含一個.git
的目錄,用於保存下載下來的全部版本記錄。而後從中取出項目最新版本的全部文件拷貝放在與
.git並列的文件夾下
。
git init 對現有的某個項目開始用Git管理
表示在當前目錄(文件夾)下建立了一個.git的隱藏目錄,這個就是所謂的Git本地倉庫,全部 Git 須要的數據和資源都存放在這個目錄中。
將工做樹中增長或修改的一些文檔 生成快照存至Git本地倉庫的一個暫存區stage中(
git add . 將當前目錄下的全部文件歸入版本控制
稱該區域爲索引index),而且變成Git本地倉庫可以識別的數據格式。
Untracked files:新建立的文件,尚未執行git add
Changes not staged for commit:已跟蹤的(或者曾經git add過的)文件修改以後,尚未執行git add進行暫存
Changes to be committed:已經執行過git add,已暫存,下次將要被一塊兒提交的文件
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的每次更新都須要提交一次。
在本地Git倉庫的根目錄建立一個名爲vim .gitignore.gitignore
的文件,將工做樹中你不但願接受Git管理的文檔的文件模式寫到.gitignore 文件中。
一般都是些IDE配置文件或者自動生成的文件,好比日誌文件,或者編譯過程當中建立的臨時文件等。
.gitignore
git commit
,將刪除該文件的操做提交上去。
rm
來刪除文件的話,僅僅是刪除了物理文件,並無將其從 git 的記錄中剔除。
rm
命令直接刪除的文件,也能夠再經過
git rm
命令從新將該文件從 git 的記錄中刪除掉,不能經過git add剔除。
由於git add .
僅能記錄添加、改動的動做,刪除的動做需靠
git rm
來完成。
好比一些大型日誌文件或者一堆編譯文件以及編譯配置文件等,這些文件是必要的,因此要移除跟蹤但不刪除文件。
移除以後,必定要在 文件中補上這些文件條目。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 -v--verbose
的簡寫,顯示遠程倉庫對應的克隆地址git remote show [remote-name]
查看某個遠程倉庫的詳細信息
--verbosegit remote show [remote-name]
git remote rename
from to 命令修改某個遠程倉庫
在本地的簡稱
[remote-name] 移除遠端倉庫的別名
從當前分支(默認HEAD處)分化出一個新的分支並切換到該分支git branch local 從當前分支(默認HEAD處)分化出一個新的分支git checkout -b local
git checkout -b local
git branch local [遠程名/分支名] 從指定分支處分化出一個新的分支
git branch local [遠程名/分支名] 從指定分支處分化出一個新的分支git checkout -b local [
git checkout -b local [
git checkout -b local [
遠程名/分支名
遠程名/分支名
遠程名/分支名
遠程名/分支名
遠程名/分支名
]
從指定分支處分化出一個新的分支
並切換到該分支
$ 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
查看還沒有合併的分支
$ git checkout local
$ git checkout master # 將當前分支切換爲master $ git merge local # 將local分支合併到當前分支master上
第一種合併狀況:若是順着一個分支走下去能夠到達另外一個分支的話,那麼Git在合併二者時,只會簡單地把指針右移,稱爲快進(Fast forward)。
第二種合併狀況:
若是是兩個分叉的分支進行合併,Git會用兩個分支的末端(C4和C5)以及它們的共同祖先(C2)進行一次簡單的三方合併計算。Git沒有簡單地把分支指針右移,而是對三方合併後的結果從新作一個新的快照,並自動建立一個指向它的提交對象(C6)(見圖 3-17)。這個提交對象比較特殊,它有兩個祖先(C4 和 C5)。
![](http://static.javashuo.com/static/loading.gif)
第三種合併狀況:
若是在不一樣的分支中都修改了同一個文件的同一部分,Git就沒法乾淨地把二者合到一塊兒。Git做了合併,但沒有提交,它會停下來等你解決衝突。要看看哪些文件在合併時發生衝突,能夠用git status
查閱。任何包含未解決衝突的文件都會以未合併(unmerged)的狀態列出。
$ git rebase
雖然會跟merge合併操做獲得的結果沒有任何區別,但衍合能產生一個更爲整潔的提交歷史,彷彿全部修改都是在一根線上前後進行的。
$ git branch -d local
pull指令其實包含了fetch(將變動複製回來)以及merge(合併)操做兩個步驟!
# 將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