昨天下午參考廖雪峰的博客和其他一些文章,簡單了解了一下傳說中的Git,發現常見用法入門還是挺容易上手的,在此做一些筆記,方便以后查閱和復習。

Git安裝
Linux
sudo apt-get install git命令安裝Git
Windows
官網下載 安裝即可,不贅述。
注:安裝時注意一步:選擇第二項,將git添加到path中。
創建版本庫
-
創建項目文件夾,例如:demo
-
進入demo目錄下:
git init命令將這個目錄變成git可以管理的倉庫(repository)。將倉庫建好后,倉庫目錄下會多了一個.git隱藏文件夾。可以用ls -ah查看隱藏文件。 -
向庫里添加一個
readme.txt文件: -
git add告訴git,要把文件添加到倉庫:git add readme.txt執行命令,其實,這一步的作用就是將文件添加到stage(暫存區)。
-
git add .將所有文件添加到暫存區。 -
git add -u將所有文件添加暫存區,同時,將刪除的文件從倉庫中刪除。
-
-
git commit命令,將文件提交到倉庫。git commit -m "wrote a readme file"注:
-m是對本次提交的說明,不該偷懶省去。 -
git status查看當前版本庫的狀態。 -
git diff顯示具體的尚未緩存的改動記錄。 -
git log記錄每次commit的信息。git log --pretty=oneline將每次commit的記錄打印成一行,內容精簡。 -
git reset修改命令:-
git reset HEAD廢除這次修改記錄,當前文件回到上一次提交的狀態。 -
`git reset --hard [commit id]
-
-
git rm慎用。這個命令會將所有版本庫記錄刪除。
遠程倉庫
創建SSH Key。在類似C:\Users\xiang_000\.ssh這樣的主目錄下,查看是否有id_rsa和id_rsa.pub文件。如果有了,直接可以將公鑰添加到github賬戶上。如果沒有,打開Shell(windows下的Git Bash):
ssh-keygen -t rsa -C "youremail@example.com"
id_rsa.pub是公鑰,可以放心的告訴任何人。
在github的Account settings里,Add SSH Key。
從遠程庫克隆
如果從零開發,推薦的方式是先在github上創建遠程倉庫。然后,從遠程庫克隆。
在github創建名為:learngit的新倉庫。勾選添加README.md。
git clone克隆一個本地庫:
git clone git@github.com:michael728/learngit.git
添加(關聯)遠程庫
建完本地庫,又想在github創建一個git倉庫,讓兩個倉庫進行遠程同步。
在github創建新的repo,名字為:demo
根據github的提示,在本地的demo倉庫下運行命令:
git remote add origin git@github.com:michae728/demo.git`
-
請千萬注意,把上面的
michae728替換成你自己的GitHub賬戶名,否則,你在本地關聯的就是我的遠程庫,關聯沒有問題,但是你以后推送是推不上去的,因為你的SSH Key公鑰不在我的賬戶列表中。 -
添加后,遠程庫的名字就是origin,這是Git默認的叫法,也可以改成別的,但是origin這個名字一看就知道是遠程庫。
將本地庫的所有內容推送到遠程庫上:
git push -u origin master
把當前分支master推送到遠程。由於之前遠程庫是空的,第一次推送master分支時,加上了-u參數。git不但把本地的master分支內容推送到遠程新的master分支,還會把本地master分支和遠程的master分支關聯起來,以后推送或者拉取就可以簡化命令。
從現在起,本地提交,可通過命令:
git push origin master
分享與更新項目
git push:
-
git push origin dev表示提交到遠程的dev分支。 -
通常在本地的dev分支推送到遠程的dev分支,注意兩地分支命名要相同,保證不發生混亂
git pull:
git pull origin dev表示拉遠程dev分支到本地,並和本地dev分支合並
git fetch(不常用):
git fetch origin dev表示拉遠程dev分支到本地,但是,不和本地dev分支合並
git remote:
git remote add github git@github.com:michael728/test.git將本地倉庫推送到github上名為test的倉庫里
分支管理
創建於合並分支
創建dev分支,然后切換到dev分支:
git checkout -b dev
相當於下面兩條命令:
git branch dev
git checkout dev
git branch命令用於查看當前分支。當前分支前面會有*:
-
git branch查看本地分支 -
git branch -a查看本地和遠程所有分支 -
git branch -r查看遠程分支 -
git branch -d刪除本地分支 -
git push :origin dev刪除遠程dev分支 -
git checkout master命令用於dev分支完成工作后,切換回master分支。
git merge用於本地的指令。如果當前分支是master,本地另一個分支是dev,用下面命令將分支合並到master:
git merge dev
后悔葯
版本回退
git log來查詢歷史記錄。git log --pretty=oneline顯示精簡信息。
git中,HEAD表示當前版本,上一個版本就是HEAD^,上上個版本HEAD^^,上100個版本,寫成HEAD~100。
回到上一個版本:
git reset --hard HEAD^
或者通過git reset --hard [commit id]回到指定版本號的版本。
git版本的回退速度很快,因為git內部有個指向當前版本的HEAD指針。git僅僅是通過修改HEAD指向就可以完成版本切換的工作。
git reflog用來查看命令歷史。通過這個,就可以查到之前的版本號啦!
工作區和暫存區
工作區(Working Directory)
例如我們創建的demo文件夾,他就是一個工作區。
版本庫(Repository)
工作區有一個隱藏目錄.git,這個不算工作區,它是git的版本庫。
git的版本庫里存了很多東西,最重要的是稱為stage的暫存區,還有git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。

說明:
-
git add實際上就是把文件修改添加到暫存區; -
git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
因為我們創建愛你git版本庫是,git自動為我們創建了唯一一個master分支,所以,現在git commit 就是往master分支上提交更改。(因為以后還有可能往分支上提交啊!)
+ `git status`可以查看狀態。如果有文件從來沒有被添加過,那么它的狀態是:`Untracked`。
+ 提交成功后,如果沒有對工作區做任何修改,那么工作區就是`working directory clean`
管理修改
git diff HEAD -- README.md命令查看工作區和版本庫里最新版本的區別。
撤銷修改
分為兩種情況的修改:
修改了工作區某個文件的內容,想直接丟棄修改:
git checkout -- filename
注:--前后都有空格。
當修改了工作區內容,同時,添加到了暫存區,分兩步:
-
用命令
git reset HEAD filename,回到場景1 -
用場景1的方法操作。
刪除文件
當刪除了工作區的文件,git知道刪除了文件,因此,工作區和版本庫就不一致。git status命令會立刻告訴那些文件被刪除了。有兩個選擇:
-
確實要從版本庫里刪除該文件,用命令
git rm fimename,之后git commit提交。 -
誤刪,因為版本庫里還有,可以很輕松的把誤刪的文件恢復到最新版:
git checkout -- filename
注:git checkout其實是用版本庫里的東西替換工作區的版本。無論工作區是修改還是刪除,都可以一鍵還原。
附件

歡迎來我的博客:Michael翔的小窩
