內容簡介
- 獲取Git倉庫(init/clone)
- 記錄每次更新到倉庫(commit)
- 查看提交歷史(log)
- 撤銷操作(--amend)
- Git 別名(alias.)
獲取Git倉庫
獲取Git倉庫的方式有兩種,一種是初始化一個倉庫,把項目文件都添加到這個倉庫中。另一種是從遠程Git服務器把倉庫下載到本地。
在現(xiàn)有目錄中初始化倉庫
打開命令窗口,進入項目的根目錄下,輸入以下命令
git init
該命令會在當前目錄中創(chuàng)建一個.git的文件夾,可以使用ls -a查看。這時候我們初始化了一個git倉庫,但是您的項目文件還沒有被跟蹤。如果想要被跟蹤,需要先將文件添加到暫存區(qū),之后再提交到git倉庫中。
克隆Git服務器上面的倉庫
如果你要修改已有的項目文件或者查看其他人的Git倉庫文件,那么就需要從遠程Git服務器把遠程倉庫下載到本地??寺}庫的命令格式為git clone [url],比如:
git clone https://github.com/quanyipinghe/GitDemo.git
執(zhí)行這個命令之后,會在當前目錄生成一個名字為'GitDemo'的目錄,該目錄下包含了項目的文件和Git倉庫(.git目錄)。如果你想在clone倉庫的時候自定義本地目錄名字,那么就用這樣的命令格式git clone [url] [目錄名]
Git支持多種數(shù)據(jù)傳輸協(xié)議
-
https://協(xié)議,比如上面的例子 -
git://協(xié)議,git協(xié)議涉及到安全問題,如果是公開項目可以使用該協(xié)議 -
SSH協(xié)議,比如user@server:path/to/repo.git
記錄每次更新到倉庫
我們工作目錄下的每一個文件都不外乎這兩種狀態(tài):已跟蹤或未跟蹤。 已跟蹤的文件是指那些被納入了版本控制的文件,在上一次快照中有它們的記錄,在工作一段時間后,它們的狀態(tài)可能處于未修改,已修改或已放入暫存區(qū)。 工作目錄中除已跟蹤文件以外的所有其它文件都屬于未跟蹤文件,它們既不存在于上次快照的記錄中,也沒有放入暫存區(qū)。 初次克隆某個倉庫的時候,工作目錄中的所有文件都屬于已跟蹤文件,并處于未修改狀態(tài)。
我們使用Git時,文件狀態(tài)的聲明周期如下圖所示。

查看文件的狀態(tài)
查看文件狀態(tài)使用命令git status,如果在clone倉庫以后首次使用此命令,那么我們會看到如下結果:
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean
現(xiàn)在讓我們在工作目錄中新增一個README文件。如果目錄中之前不存在這個文件,那么我們git status將看到如下結果
$echo 'My Project' > README
$git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
README
nothing added to commit but untracked files present (use "git add" to track)
從狀態(tài)報告中我們可以看出README文件處于未跟蹤(untracked)狀態(tài),未跟蹤的意思是之前的快照中沒有該文件,Git也不會自動將其納入跟蹤范圍,除非我們主動的將此文件添加到跟蹤范圍(暫存區(qū))
跟蹤新文件
其實在上面的狀態(tài)報告中已經(jīng)給我一些如何跟蹤的提示了。跟蹤某個新文件執(zhí)行git add [file] 這個命令就可以了,此命令會將新文件添加到暫存區(qū)。再次查看狀態(tài)我們可以看到
$git add README
$git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: README
只要出現(xiàn)在Changes to be committed這句話下面,那么說明文件處于已暫存狀態(tài)。此時我們我們也可以將文件提交到倉庫中。
提交文件的變化
使用git commit -m [內容] 命令可以將暫存區(qū)的快照提交到版本庫中。
$git commit -m "add file"
[master e0c323d] add file
1 file changed, 1 insertion(+)
create mode 100644 README
修改已跟蹤的文件并查看狀態(tài)

在Changes not staged for commit下面說明該文件被修改了,但是沒有放大暫存區(qū)。因此我們可以執(zhí)行git add [文件] 命令將其添加到暫存區(qū)。

這個說明文件的修改已放到暫存區(qū)了。此時如果我們再次修改了工作目錄的這個文件,我們再次查看文件狀態(tài)如下:

如果此時我們執(zhí)行提交操作,只會把暫存區(qū)的修改提交到本地倉庫中,工作目錄的修改并不會被提交。因此,如果我們修改了文件并且此修改有必要提交,那么請及時放到暫存區(qū)。
狀態(tài)簡覽
git status此命令的輸出非常詳細,但不免有時候對于我們來說顯得有點繁瑣,此時,我們可以用更簡單的命令來查看狀態(tài)git status -s (git status --short)。

查看已暫存和未暫存的修改
git diff命令將通過文件補丁的格式來具體顯示文件的哪些行發(fā)生了變化。
要查看尚未暫存的文件做了什么修改,可以使用git diff命令

此命令比較的是工作目錄中的當前文件和暫存區(qū)域快照之間的差異,也就是修改之后還沒有暫存起來的變化內容。
如果要查看已暫存的準備提交到版本庫的修改可以使用git diff --cached命令或者git diff --staged命令

跳過使用暫存區(qū)域來提交文件
如果您不想每次更新了工作目錄的文件,然后都要先放到暫存區(qū),之后再提交的話。那么我們可以跳過把變化的文件放到暫存區(qū)這一步,直接提交工作目錄變化的文件到本地倉庫中。我們可以在git commit 后面 加一個-a 參數(shù)就可以實現(xiàn)了。

從這里我們可以看出,提交了工作目錄和暫且區(qū)域文件的修改到倉庫中。
移除文件
要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區(qū)域移除),然后提交。
使用git rm [文件] 命令會將文件從暫存區(qū)移除并且也從工作目錄移除。這樣此文件就不會出現(xiàn)在未跟蹤列表中了。

如果刪除之前修改過該文件并且已經(jīng)放到暫存區(qū)了,那么必須要用強制刪除選項 -f
還有一種情況,如果我們只是簡單的想讓某個文件從版本庫中移除,但是還想保留在本地磁盤上面。那么我們可以使用--cached選項。

文件重命名
重命名文件用的這個命令git mv [file1] [file2]

其實上面這句命令相當于下面這三句命令
$mv README README.md
$git rm README
$git add README.md
查看提交歷史
在提交了若干次更新后或者從遠程倉庫下載下拉項目之后,我們想
查看文件的更新歷史,此時我們就可以用git log命令了。

git log有很多好用的參數(shù)。一個比較常用的就是-p,用來顯示每次提交的內容差異。同時你也加上-2來顯示最近兩次的提交:

--stat選項可以查看每次提交的簡略信息:

--pretty選項可以指定不同的默認格式來展示每次的提交歷史,它有一些內建的子選項可以使用。比如oneline可以將信息放到一行顯示,當提交歷史比較多的時候很實用。另外還有short,full和fuller等。

但最有意思的format子選項,它可以指定顯示的記錄格式:

關于這些占位符的意思,請看下圖:

--graph選項和format選項配合使用會有不一樣的結果,如果有分之的話,因為它可以用不同的符號把分之給連接起來。
關于git log 的常用選項還有如下所有:

在限制git log輸出的選項中常用的選項

撤銷操作
在任何時候,你都有可能想要撤銷某些操作。
如果我們提交完了,才發(fā)現(xiàn)漏掉了幾個文件沒有添加或者提交信息寫錯了,那么我們可以使用帶有 --amend選項的提交命令重新提交。
$ git ci --amend -m "修改文件內容"
當你發(fā)現(xiàn)只是提交內容不對的時候,然后立馬執(zhí)行的上面這句命令,那么快照會保存不變,只是提交內容發(fā)生了變化。
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最終你只會有一個提交--第二次提交的結果替代第一次的提交,提交信息不變。
取消暫存的文件
有時候我們想把兩個修改的文件分兩次提交,但是我們不小心把這兩個文件都放到了暫存區(qū),現(xiàn)在我們就想把不提交的那個文件從暫存區(qū)移除。
git reset HEAD [文件]將文件從暫存區(qū)移除

撤銷對文件的修改
如果我們想撤銷工作目錄中我們修改的文件時,我們應該用下面這個命令:
git checkout -- [文件]
這個命令可以撤銷在工作目錄里面修改的但是沒有放到暫存區(qū)的文件。
Git 別名
顧名思義,別名就是名字的別稱。如果您用過svn命令的話,您應該知道svn有命令的縮寫形式,那么Git命令有沒有對應的縮寫呢?當然也是有的,只是需要你去配置一下。
git config --global alias.[別稱] 原命令
比如:
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --' // 取消暫存的別名
...
其實當我們執(zhí)行 git st的時候,就相當于執(zhí)行了git status.
Git只是簡單的將別名替換成對應的命令而已。
有了別名,我們就可以輕松很多了O(∩_∩)O~~