Git經常使用命令總結

首先說一句,git跟蹤並管理的是修改,而非文本。(18年的五四青年節,今天在作好一個項目的需求以後,須要重置工做區的修改,還有從遠程上克隆下來(git clone url 默認是隻會克隆master分支下的東西),而後再新建一個分支幹活,幹完活以後再提交到新建分支上,而後再提merge請求,進行合併,這裏再簡單複習一下git的命令,還有補充總結一下)html

這裏有一個簡化的圖,有助於更好的操做git。
git工做區,暫存區的關係
這裏有一些經常使用的命令,總結一下,以便往後查看。git

撤銷工做區裏面所作的修改(修改本地倉庫中的文件後,執行git add以前)
git checkout -- filename(readme.txt):這個命令是將工做區裏面的修改所有撤銷。這裏有兩種狀況:github

  • 在工做區中修改以後,尚未提交到暫存區,執行git checkout -- readme.txt以後,會回到工做區以前沒有修改的狀態
  • 在工做區中修改後已經提交到暫存區,而後又作了修改,這時候執行git checkout -- readme.txt以後,會回到提交到暫存區的狀態
    總的來講,git checkout -- filename這個命令會將文件退回到最近一次的git commit或者git add時的狀態。這個過程可使用git status查看版本庫的狀態

撤銷暫存區裏面所作的修改(執行git add 以後,git commit以前)
git reset HEAD filename(readme.txt):能夠撤銷暫存區裏面的修改到工做區,git reset也能夠回退版本。這個過程也可使用git status查看版本庫的狀態app

撤銷已經從暫存區提交到版本庫的修改(執行git commit以後,git push以前)
在這個過程當中,版本控制系統能夠告訴咱們的歷史記錄,這個命令是git log,能夠查看git commit的歷史記錄。fetch

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

若是以爲輸出信息有點亂的話,能夠添加--pretty=oneline參數url

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0(這一串數字是commit id,即版本號) append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

版本回退
既然是版本回退,就須要知道當前是出於哪一個版本,通常當前的是HEAD,上個版本是HEAD^,上上個版本是HEAD^^,上100個版本能夠是HEAD~100.
git reset --hard HEAD^ : 用於回退到當前版本的上一個版本
git reset --hard HEAD^^:用於回退到當前版本的上上個版本
git reset --hard 版本號:用於回退到指定的版本號
當你回退到以前的某個版本,而後下班回家了,明天早上想回到將來的某個版本,可使用git reflog查看版本號
git reflog : 記錄你執行的每一次命令,以肯定回到將來的哪一個版本3d

1.git reset HEAD filename
2.git checkout --filename
```
上面這兩步一塊兒使用:適用於不但改亂了工做區某個文件的內容,還添加到暫存區,想丟棄修改的狀況。版本控制

git reset --hard HEAD^^ :
回退到當前版本的上上個版本(前提是沒有推送到遠程倉庫)code

git remote add origin 遠程倉庫的地址 :將本地的倉庫與github的倉庫想關聯。
git fetch命令只是將遠端的數據拉到本地倉庫,並不自動合併到當前工做分支,肯定好了,本身手工合併git merge
git clone 克隆一個倉庫,會自動將遠程倉庫歸於origin下,git fetch origin 會抓取從你克隆以來別人上傳到遠程倉庫中的全部更新。初次克隆某個倉庫的時候,工做目錄中的全部文件都屬於已跟蹤文件,且狀態爲未修改,在編輯過某寫文件以後,Git將這些文件標爲已修改。還有克隆以後,本質上自動建立本地master分支用於跟蹤遠程倉庫中的master分支。
git clone -b 分支名 倉庫地址:克隆遠程某個分支到本地
git diff :比較工做目錄中當前文件和暫存區域中快照之間的差別
git diff --cached 查看已經暫存起來的文件和上次提交的時候的快照之間的差別
注意:從git中移除某個文件,必須從暫存區中移除,而後提交。
git rm :從工做目錄中刪除指定的文件,之後就不會出如今未跟蹤文件清單中。
git rm --cached readme.txt 移除跟蹤但不刪除文件
git remote show [remote-name]: 查看遠程倉庫詳細信息
git remote rm :刪除遠程倉庫,固然不止這一種方法。
git branch [branch-name] :建立一個分支,但不會切換到此分支下,仍是在master分支下。
git checkout [branch-name]: 切換分支(注意:最好保持一個清潔的工做區域以後再切換分支)
gitk -a:運行這個命令能夠打開一個圖形界面,能夠看到清晰的歷史記錄,不一樣分支之間的關係狀況。
git merge 分支名(aa):將某個分支aa合併到當前分支
git pull 遠程主機名 遠程分支名:本地分支名:取回遠程主機名的某個分支的更新,再和本地指定分支進行合併,若是遠程分支是和當前分支名進行合併,則本地分支名能夠省略。
git push 遠程主機名 本地分支名:遠程分支名:注意分支推送順序和git pull的區別,若是省略遠程分支名,是將本地分支推送到與之存在跟蹤關係的遠程分支,若是不存在則會建立。
git rebase 分支名(bb):將bb分支合併到當前分支htm

另附兩個講的詳細的連接

https://www.cnblogs.com/marblemm/p/7161614.html 這個連接是講的git merge和git rebase的區別,講的挺詳細的。 https://www.zhihu.com/people/caseby/answers 這篇文章寫得很好,在開發過程當中使用git merge仍是git rebase,優缺點是什麼。

相關文章
相關標籤/搜索