本文適合作為一個速查手冊使用,希望深入了解 git 的同學,請前往 Pro Git 中文版 下載 《Pro Git》手冊進行學習
Cherish作為一名菜鳥程式員在剛剛接觸git時,雖然仔細閱讀了《Pro Git》的第一、二章,基本清楚了git的使用流程,然而在實際運用中,卻因為記不住各種常用的git 命令而常常畏手畏腳,經常因為使用了錯誤的git命令而把作業搞得焦頭爛額,因為不記得各種 git 命令,常常要在使用時臨時翻看手冊,在經歷過一番煎熬后,我下定決心要對常用的 git 技巧進行一個簡練概括的總結,以下是我結合參考資料和平時的日常使用總結出來的31個git 實用技巧,隨著在作業中更過使用場景的豐富,還會不斷添加新的技巧,不斷豐富和完善,
一、基本操作
1.如何新建倉庫?
1.1. 將尚未進行版本控制的本地目錄轉換為 Git 倉庫
- 進入該專案得目錄中;
$ cd /c/user/my_project
- 執行
git init;
$ git init
- 使用
git add追蹤已存在得專案檔案;
$ git add *.c
- 使用
git commit進行初始提交;
$ git commit -m 'initial project version' // 提交時添加comments
現在,你已經得到了一個存在被追蹤檔案與初始提交的 Git 倉庫,
1.2 從其它服務器 克隆 一個已存在的 Git 倉庫
- 克隆命令:
git clone <url>
$ git clone https://github.com/libgit2/libgit2
- 如果你想在克隆遠程倉庫的時候,自定義本地倉庫的名字,你可以通過額外的引數指定新的目錄名:
$ git clone https://github.com/libgit2/libgit2 myName
Git 支持多種資料傳輸協議, 上面的例子使用的是 https:// 協議,不過你也可以使用 git:// 協議或者使用SSH 傳輸協議,比如 user@server:path/to/repo.git ,
2.如何查看當前專案中檔案的狀態?
- 可以用 git status 命令查看哪些檔案處于什么狀態(狀態資訊比較詳細)
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
- 使用
git status -s命令或git status --short命令 (狀態資訊比較簡潔)
$ git status -s
- 最具體得查看方式:
git diff,可具體到具體更改文本內容
$ git diff
3.如何跟蹤一個新添加的檔案?
git add 檔案名
$ git add xxx檔案
4.如何暫存一個已修改得檔案?
- 還是
git add 檔案名命令,這是一個多功能命令
$ git add xxx檔案
5.如何忽略某些無需納入 git 管理得檔案?
- 創建一個
.gitignore;
$ cat .gitignore
- 在該檔案中添加需要忽略得檔案;
*.[oa] // 忽略所有以 .o 或 .a 結尾的檔案
*~ // 忽略所有名字以波浪符(~)結尾的檔案
檔案 .gitignore 的格式規范如下:
? 所有空行或者以 # 開頭的行都會被 Git 忽略,
? 可以使用標準的 glob 模式匹配,它會遞回地應用在整個作業區中,
? 匹配模式可以以(/)開頭防止遞回,
? 匹配模式可以以(/)結尾指定目錄,
? 要忽略指定模式以外的檔案或目錄,可以在模式前加上嘆號(!)取反,
- 查看已暫存的將要添加到下次提交里的內容
$ git diff --staged
6.如何提交更新
- 使用
git status查看檔案狀態,看看是否有未暫存得檔案;
$ git status
- 使用
git commit提交更新
$ git commit
- 可以在 commit 命令后添加 -m 選項,將提交資訊與命令放在同一行,可不必打開編輯器編輯提交資訊
$ git commit -m "Story 182: Fix benchmarks for speed"
[master 463dc4f] Story 182: Fix benchmarks for speed
2 files changed, 2 insertions(+)
create mode 100644 README
提交后它會告訴你,當前是在哪個分支(master)提交的,本次提交的完整 SHA-1 校驗和是什么(463dc4f),以及在本次提交中,有多少檔案修訂過,多少行添加和刪改過
請記住,提交時記錄的是放在暫存區域的快照, 任何還未暫存檔案的仍然保持已修改狀態,可以在下次提交時納入版本管理,
7.如何跳過暫存步驟,直接提交所有已跟蹤的修改過得檔案
- 給 git commit 加上 -a 選項,Git 就會自動把所有已經跟蹤過的檔案暫存起來一并提交,從而跳過 git add 步驟
$ git commit -a -m 'added new benchmarks'
8.如何將納入git版本管理的檔案排除版本管理
要從 Git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除,然后提交
- 用
git rm命令完成此項作業,并連帶從作業目錄中洗掉指定的檔案
$ git rm PROJECTS.md
rm 'PROJECTS.md'
$ 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)
deleted: PROJECTS.md
9.如何查看提交歷史?
git log命令
$ git log
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <[email protected]>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
10.如何撤銷對檔案的修改?
- 如果你并不想保留對某個檔案的修改怎么辦? 你該如何方便地撤消修改——將它還原成上次提
交時的樣子?
git checkout -- 檔案名
$ git checkout -- 檔案名
請務必記得 git checkout --
是一個危險的命令, 你對那個檔案在本地的任何修改都會消失——Git 會用最近提交的版本覆寫掉它,
二、分支管理
11. 如何創建新的分支?
- 使用
git branch命令,在當前分支的基礎上創建一個新的分支
$ git branch 分支名
12.如何切換分支?
- 使用
git checkout 分支名命令,切換到一個已存在的分支
$ git checkout 分支名
- 通常我們會在創建一個新分支后立即切換過去,這可以用
git checkout -b <newbranchname>一條命令搞定;
13.如何查看分支分叉歷史?
- 使用
git log命令
14. 新建分支并切換到該分支上
$ git checkout -b 分支A
該陳述句是下面兩句的簡寫:
$ git branch 分支A
$ git checkout 分支A
15.合并目標分支(將目標分支合并到當前分支上)
git merge 目標分支將目標分支合并到當前分支
$ git checkout master // 切到 master
$ git merge hotfix // 將hotfix 合并到 master
16. 如何洗掉一個不需要的分支?
- 使用
git branch -d 分支名
$ git branch -d hotfix
Deleted branch hotfix (3a0874c)
17.在合并分支時遇到沖突怎么辦?
- 現象:
$ git merge iss53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
此時 Git 做了合并,但是沒有自動地創建一個新的合并提交, Git 會暫停下來,等待你去解決合并產生的沖突
任何因包含合并沖突而有待解決的檔案,都會以未合并狀態標識出來, Git 會在有沖突的檔案中加入標準的沖突解決標記,這樣你可以打開這些包含沖突的檔案然后手動解決沖突,
<<<<<<< HEAD:index.html
<div id="footer">contact : [email protected]</div>
=======
<div id="footer">
please contact us at [email protected]
</div>
>>>>>>> iss53:index.html
為了解決沖突,你必須選擇使用由 ======= 分割的兩部分中的一個,或者你也可以自行合并這些內
容,上述的沖突解決方案僅保留了其中一個分支的修改,并且 <<<<<<< , ======= , 和 >>>>>>> 這些行被完全洗掉了,在你解決了所有檔案里的沖突之后,對每個檔案使用 git add 命令來將其標記為沖突已解決, 一旦暫存這些原本有沖突的檔案,Git 就會將它們標記為沖突已解決,
如果你想使用圖形化工具來解決沖突,你可以運行git mergetool,該命令會為你啟動一個合適的可視化合并工具,并帶領你一步一步解決這些沖突.
18. git branch 命令如何使用?
git branch命令不只是可以創建與洗掉分支, 如果不加任何引數運行它,會得到當前所有分支的一個串列;
$ git branch
iss53
* master // * 代表當前指標所在位置
testing
git branch -v查看每一個分支的最后一次提交;
$ git branch -v
iss53 93b412c fix javascript issue
* master 7a98805 Merge branch 'iss53'
testing 782fd34 add scott to the author list in the readmes
git branch --merged查看哪些分支已經合并到當前分支;
$ git branch --merged
iss53
* master
三、遠程倉庫
19.如何查看遠程倉庫?
- 如果想查看你已經配置的遠程倉庫服務器,可以運行
git remote命令,如果你已經克隆了自己的倉庫,那么至少應該能看到 origin ——這是 Git 給你克隆的倉庫服務器的默認名字;
$ git remote
origin
- 如果你的遠程倉庫不止一個,該命令會將它們全部列出;
20.如何添加遠程倉庫?
- 運行
git remote add <shortname> <url>添加一個新的遠程 Git 倉庫,同時指定一個方便使用的簡寫;
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)
21.如何從遠程倉庫中抓取(fetch)和拉取(pull)?
- 從遠程倉庫中獲得資料,可以執行
git fetch <remote>;
$ git fetch <remote>
這個命令會訪問遠程倉庫,從中拉取所有你還沒有的資料, 執行完成后,你將會擁有那個遠程倉庫中所有分支的參考,可以隨時合并或查看,
必須注意 git fetch 命令只會將資料下載到你的本地倉庫——它并不會自動合并或修改你當前的作業, 當準備好時你必須手動將其合并入你的作業
- 用
git pull命令來自動抓取后合并該遠程分支到當前分支
$ git pull
22.如何推送到遠程倉庫?
- 使用
git push <remote> <branch>
$ git push origin xxx分支
23.如何查看某個遠程倉庫的資訊?
- 使用
git remote show <remote>命令;
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
它同樣會列出遠程倉庫的 URL 與跟蹤分支的資訊, 這些資訊非常有用,它告訴你正處于 master 分支,并且如果運行 git pull, 就會抓取所有的遠程參考,然后將遠程 master 分支合并到本地 master 分支, 它也會列出拉取到的所有遠程參考
24.如何移除遠程分支?
- 使用
git remote remove或git remote rm
四、遠程分支
25. 如何操作遠程分支?
-
使用
git ls-remote <remote>來顯示地獲取遠程參考的完整串列 -
使用
git remote show <remote>獲取遠程分支的更多資訊
27. 如何配置編輯注釋時使用得編輯器?
- 啟動的編輯器是通過 Shell 的環境變數 EDITOR 指定的,一般為 vim 或 emacs, 當然也可以按照 起步 介紹的方式, 使用
git config --global core.editor命令設定你喜歡的編輯器,
26. 什么是跟蹤遠程分支?
- 從遠程分支 checkout 出來的本地分支,稱為 跟蹤分支 (tracking branch),跟蹤分支是一種和某個遠程分支有直接聯系的本地分支,
- 在跟蹤分支里輸入
git push,Git 會自行推斷應該向哪個服務器的哪個分支推送資料,同樣,在這些分支里運行git pull會獲取所有遠程索引,并把它們的資料都合并到本地分支中來,
27. 如何自定義設定跟蹤分支?
- 使用
git checkout -b [branch] [remotename]/[branch]
$ git checkout -b [branch] [remotename]/[branch]
// 從遠程分支上的 branch 分支上牽出一個 名為branch 的本地分支
如果想要將本地分支與遠程分支設定為不同名字,可以使用如下示例命令:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'
以上,本地分支 sf 會自動從 origin/serverfix 拉取,
這是一個十分常用的操作,所以 Git 提供了 --track 快捷方式,
- 自定義牽出遠程分支的快捷方式:
git checkout --track origin/serverfix
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
28.如何設定本地分支跟蹤某個遠程分支?
- 使用
git branch -u origin/serverfix或者git branch --set-upstream-to origin/serverfix可設定本地分支跟蹤某個遠程分支,或者修改正在跟蹤的遠程分支
$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
29. 如何查看所有設定的跟蹤分支?
- 使用
git branch -vv命令,這會將所有的本地分支列出來
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
testing 5ea463a trying something new
這里可以看到 iss53 分支正在跟蹤 origin/iss53 并且
ahead'' 是 2,意味著本地有兩個提交還沒有推送到服務器上, 也能看到master 分支正在跟蹤 origin/master 分支并且是最新的, 接下來可以看到 serverfix 分支正在跟蹤 teamone 服務器上的 server-fix-good 分支并且領先 2 落后 1,意味著服務器上有一次提交還沒有合并入同時本地有三次提交還沒有推送, 最后看到 testing 分支并沒有跟蹤任何遠程分支,
30. 如何統計最新的領先與落后數字?
- 使用命令
git fetch --all; git branch -vv
31. 如何洗掉遠程分支?
- 使用帶有
--delete選項的git push命令來洗掉一個遠程分支;
$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
- [deleted] serverfix
持續更新中,,,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/280887.html
標籤:其他
上一篇:Pyinstaller原理詳解
下一篇:OOP作業總結(二)
