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