git 經常使用命令


git經常使用命令html

一、git的安裝配置git

1.一、安裝git
在 Linux 上安裝
若是你在基於 Fedora
$ sudo yum install gitgithub

若是你在基於 Debian 的發行版上,請嘗試用 apt-get
$ sudo apt-get install git安全


1.二、使用 Git 來獲取 Git 的升級
$ git clone git://git.kernel.org/pub/scm/git/git.git服務器

1.三、安裝完成的git配置
$ git config --global user.name "toloy"
$ git config --global user.email "274696224@qq.com"scrapy

1.四、配置默認的文本編輯器
Git 會使用操做系統默認的文本編輯器,一般是 Vim,若是你想使用不一樣的文本編輯器,例如 Emacs
$ git config --global core.editor emacs編輯器

1.五、檢查配置信息
$ git config --list
會顯示下面內容
core.symlinks=true
core.autocrlf=true
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
user.name=toloy
user.email=274696224@qq.com
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
remote.origin.url=git@gitee.com:toloy/scrapy-tieba.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master工具

1.六、檢查配置某一項的內容
$ git config user.name
toloyfetch

二、git基礎ui

2.1 在現有目錄中初始化倉庫
$ git init
該命令將建立一個名爲 .git 的子目錄,這個子目錄含有你初始化的 Git 倉庫中全部的必須文件,這些文件是 Git 倉庫的骨幹。 可是,在這個時候,咱們僅僅是作了一個初始化的操做,你的項目裏的文件尚未被跟蹤。

2.2 克隆現有的倉庫 ,克隆倉庫的命令格式是 git clone [url]
當你執行 git clone 命令的時候,默認配置下遠程 Git 倉庫中的每個文件的每個版本都將被拉取下來
$ git clone https://github.com/libgit2/libgit2
這會在當前目錄下建立一個名爲 「libgit2」 的目錄,並在這個目錄下初始化一個 .git 文件夾,從遠程倉庫拉取下全部數據放入 .git 文件夾,而後從中讀取最新版本的文件的拷貝,
若是你想在克隆遠程倉庫的時候,自定義本地倉庫的名字,你可使用以下命令:
$ git clone https://github.com/libgit2/libgit2 toloy

2.3 記錄每次更新到倉庫
你工做目錄下的每個文件都不外乎這兩種狀態:已跟蹤或未跟蹤。 已跟蹤的文件是指那些被歸入了版本控制的文件,在上一次快照中有它們的記錄,在工做一段時間後,它們的狀態可能處於未修改,已修改或已放入暫存區。 工做目錄中除已跟蹤文件之外的全部其它文件都屬於未跟蹤文件,它們既不存在於上次快照的記錄中,也沒有放入暫存區。 初次克隆某個倉庫的時候,工做目錄中的全部文件都屬於已跟蹤文件,並處於未修改狀態。
編輯過某些文件以後,因爲自上次提交後你對它們作了修改,Git 將它們標記爲已修改文件。 咱們逐步將這些修改過的文件放入暫存區,而後提交全部暫存了的修改,如此反覆。

2.4 檢查當前文件狀態
$ git status

2.5 跟蹤新文件
$ git add s.py
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:   s.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        git/

此時再運行 git status 命令,會看到 README 文件已被跟蹤,並處於暫存狀態
只要在 Changes to be committed 這行下面的,就說明是已暫存狀態。 若是此時提交,那麼該文件此時此刻的版本將被留存在歷史記錄中


2.6 暫存已修改文件
若是修改了一個文件,再查看狀態以下 :
$ 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:   s.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   s.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        git/

文件 s.py 出如今 Changes not staged for commit 這行下面,說明已跟蹤文件的內容發生了變化,但尚未放到暫存區。 要暫存此次更新,須要運行 git add 命令
將這個命令理解爲「添加內容到下一次提交中」而不是「將一個文件添加到項目中」要更加合適

2.7 狀態簡覽命令
$ git status -s  或 $git status --short
A  s.py
?? git/

$ git status -s
A  s.py
M  test.py
 M tieba.py
?? git/

新添加的未跟蹤文件前面有 ?? 標記
新添加到暫存區中的文件前面有 A 標記
修改過的文件前面有 M 標記 出如今右邊的 M 表示該文件被修改了可是還沒放入暫存區 出如今靠左邊的 M 表示該文件被修改了並放入了暫存區

2.8 忽略文件
通常咱們總會有些文件無需歸入 Git 的管理,也不但願它們總出如今未跟蹤文件列表。 一般都是些自動生成的文件,好比日誌文件,或者編譯過程當中建立的臨時文件等。
咱們能夠建立一個名爲 .gitignore 的文件,列出要忽略的文件模式
$ cat .gitignore
*.[oa]
*~
第一行告訴 Git 忽略全部以 .o 或 .a 結尾的文件
第二行告訴 Git 忽略全部以波浪符(~)結尾的文件
可使用標準的 glob 模式匹配

匹配模式能夠以(/)開頭防止遞歸
匹配模式能夠以(/)結尾指定目錄
星號(*)匹配零個或多個任意字符
[abc] 匹配任何一個列在方括號中的字符(這個例子要麼匹配一個 a,要麼匹配一個 b,要麼匹配一個 c)
問號(?)只匹配一個任意字符
若是在方括號中使用短劃線分隔兩個字符,表示全部在這兩個字符範圍內的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的數字)
使用兩個星號(*) 表示匹配任意中間目錄,好比`a/**/z` 能夠匹配 a/z, a/b/z 或 `a/b/c/z`等
好比:
# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

2.9 查看已暫存和未暫存的修改
要查看還沒有暫存的文件更新了哪些部分,不加參數直接輸入 git diff
$ git diff
warning: LF will be replaced by CRLF in s.py.
The file will have its original line endings in your working directory.
diff --git a/s.py b/s.py
index c5019c3..5e5aefe 100644
--- a/s.py
+++ b/s.py
@@ -1,2 +1,3 @@
 print('s')
 print('abc')
+print("aaaaaaa")

fengxing@DESKTOP-T57P58F MINGW64 ~/gittest/scrapy-tieba (master)

若要查看已暫存的將要添加到下次提交裏的內容,能夠用 git diff --cached 命令
$ git diff --cached
diff --git a/s.py b/s.py
new file mode 100644
index 0000000..c5019c3
--- /dev/null
+++ b/s.py
@@ -0,0 +1,2 @@
+print('s')
+print('abc')
diff --git a/test.py b/test.py
index 5b33a4d..07d242d 100644
--- a/test.py
+++ b/test.py
@@ -1 +1,2 @@
 print("abc")
+print('111')
diff --git a/tieba.py b/tieba.py
index aa76653..10900ed 100644
--- a/tieba.py
+++ b/tieba.py
@@ -1,2 +1,3 @@
 print("hello tieba")

+print("33333333333")

fengxing@DESKTOP-T57P58F MINGW64 ~/gittest/scrapy-tieba (master)

2.10 提交更新
在此以前,請必定要確認還有什麼修改過的或新建的文件尚未 git add 過,不然提交的時候不會記錄這些還沒暫存起來的變化。
這些修改過的文件只保留在本地磁盤。 因此,每次準備提交前,先用 git status 看下,是否是都已暫存起來了, 而後再運行提交命令 git commit:
$ git commit
在開頭還有一空行,供你輸入提交說明,保存退出後會提交

你也能夠在 commit 命令後添加 -m 選項,將提交信息與命令放在同一行,以下所示:
$ git commit -m "Story 182: Fix benchmarks for speed"

2.11 跳過使用暫存區域
Git 提供了一個跳過使用暫存區域的方式, 只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把全部已經跟蹤過的文件暫存起來一併提交,從而跳過 git add 步驟:

2.12 移除文件
要從 Git 中移除某個文件,就必需要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),而後提交。 能夠用 git rm 命令完成此項工做,並連帶從工做目錄中刪除指定的文件,這樣之後就不會出如今未跟蹤文件清單中了。

若是刪除以前修改過而且已經放到暫存區域的話,則必需要用強制刪除選項 -f(譯註:即 force 的首字母)。 這是一種安全特性,用於防止誤刪尚未添加到快照的數據,這樣的數據不能被 Git 恢復。

咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然但願保留在當前工做目錄中。 換句話說,你想讓文件保留在磁盤,可是並不想讓 Git 繼續跟蹤。 當你忘記添加 .gitignore 文件,不當心把一個很大的日誌文件或一堆 .a 這樣的編譯生成文件添加到暫存區時,這一作法尤爲有用。 爲達到這一目的,使用 --cached 選項:
$ git rm --cached README
git rm 命令後面能夠列出文件或者目錄的名字,也可使用 glob 模式。 比方說:
$ git rm log/\*.log

2.13 移動文件
要在 Git 中對文件更名,能夠這麼作
$ git mv file_from file_to
其實,運行 git mv 就至關於運行了下面三條命令:
$ mv README.md README
$ git rm README.md
$ git add README


2.14 查看提交歷史
完成這個任務最簡單而又有效的工具是 git log 命令。
默認不用任何參數的話,git log 會按提交時間列出全部的更新,最近的更新排在最上面。

一個經常使用的選項是 -p,用來顯示每次提交的內容差別。 你也能夠加上 -2 來僅顯示最近兩次提交:
$ git log -p -2

你也能夠爲 git log 附帶一系列的總結性選項。 好比說,若是你想看到每次提交的簡略的統計信息,你可使用 --stat 選項:
$ git log --stat
--stat 選項在每次提交的下面列出全部被修改過的文件、有多少文件被修改了以及被修改過的文件的哪些行被移除或是添加了。 在每次提交的最後還有一個總結。

另一個經常使用的選項是 --pretty
這個選項能夠指定使用不一樣於默認格式的方式展現提交歷史。 這個選項有一些內建的子選項供你使用。 好比用 oneline 將每一個提交放在一行顯示,查看的提交數很大時很是有用。 另外還有 short,full 和 fuller 能夠用,展現的信息或多或少有些不一樣,請本身動手實踐一下看看效果如何。
$ git log --pretty=oneline

$ git log --pretty=format
%H 提交對象(commit)的完整哈希字串
%h 提交對象的簡短哈希字串
%T 樹對象(tree)的完整哈希字串
%t 樹對象的簡短哈希字串
%P 父對象(parent)的完整哈希字串
%p 父對象的簡短哈希字串
%an 做者(author)的名字
%ae 做者的電子郵件地址
%ad 做者修訂日期(能夠用 --date= 選項定製格式)
%ar 做者修訂日期,按多久之前的方式顯示
%cn 提交者(committer)的名字
%ce 提交者的電子郵件地址
%cd 提交日期
%cr 提交日期,按多久之前的方式顯示
%s 提交說明


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(後跟指定格式)。

還有按照時間做限制的選項,好比 --since 和 --until 也頗有用。 例如,下面的命令列出全部最近兩週內的提交:
$ git log --since=2.weeks

限制 git log 輸出的選項
-(n)   僅顯示最近的 n 條提交
--since,--after 僅顯示指定時間以後的提交。
--until,--before僅顯示指定時間以前的提交。
--author  僅顯示指定做者相關的提交。
--committer  僅顯示指定提交者相關的提交。
--grep   僅顯示含指定關鍵字的提交
-S     僅顯示添加或移除了某個關鍵字的提交

2.15 撤消操做
有時候咱們提交完了才發現漏掉了幾個文件沒有添加,或者提交信息寫錯了。 此時,能夠運行帶有 --amend 選項的提交命令嘗試從新提交:
$ git commit --amend

例如,你提交後發現忘記了暫存某些須要的修改,能夠像下面這樣操做:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
最終你只會有一個提交 - 第二次提交將代替第一次提交的結果。

使用 git reset HEAD <file>... 來取消暫存
$ git reset HEAD CONTRIBUTING.md

撤消對文件的修改
$ git checkout -- CONTRIBUTING.md

2.16 遠程倉庫的使用查看遠程倉庫若是想查看你已經配置的遠程倉庫服務器,能夠運行 git remote 命令你也能夠指定選項 -v,會顯示須要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL。$ git remote -vorigin https://github.com/schacon/ticgit (fetch)origin https://github.com/schacon/ticgit (push)

相關文章
相關標籤/搜索