Git簡易教程

1. 安裝

 

1). Ubuntu 

sudo apt-get instal git 

2). 配置 

git config --global user.name "Your Name" 

git config --global user.email "Your Email" 

 

2. 創建版本庫

 

1). 創建目錄 

mkdir myrespo 

2). 初始化版本庫

cd myrespo 

git init 

3). 創建文件

vi readme.txt 

myrespo目錄下創建一個readme.txt文件,內容如下: 

Git is version control system. 

Git is free software. 

4). 添加修改的文件到stage區域

git add readme.txt 

5). stage區域中的文件commit到本地的master分支中

git commit -m 'wrote a readme file' 

提交變更到本地倉庫,並附有提交信息 

6). 查看本地工作區的文件修改狀態

git status 

7). 查看文件的不同情況

git diff file

8). 查看commit記錄

git log 

or 

git log –pretty=oneline 

 

3. 時光機穿梭

 

1). 回退版本

git reset --hard HEAD^ 

HEAD:代表當前版本 

HEAD^:代表上一個版本 

HEAD^^:代表上上個版本 

HEAD~100:代表前100個版本 

2).查看記錄的命令操作記錄 

git reflog 

場景:

當你之前恢復到之前的版本,第二天後悔了,通過這個命令查看到昨天的操作指令,指令中有commit id, 這樣就可以通過git reset --hard commit_id回到最新的版本 

3).緩存區 

git init創建一個git repository之後,我們稱這個目錄爲工作區,在這個工作區中包含一個版本庫,版本庫中包含stage緩存區和master分支,當我們git add文件時,我們只是把文件 加載到stage中,而git commit時,我們是將存放到stage的文件,提交到master分支上。 

4).丟棄工作區的修改

場景:

當你在readme.txt文件中添加了如下文本:

my stupid boss still prefers SVN.

當你查看git status時可以查看到哪些文件已經在工作區中修改過了,我們這個例子比較簡單 但是當你修改的文件過多時,那麼丟棄敏感信息就不那麼容易了,這個時候使用如下命令就可以丟棄對工作區的修改:

git checkout – file

注意:git checkout無參數時,是創建一個分支,記着是兩個-

5).丟棄stage中的文件修改

場景:

4中,你在git add file之前發現問題,那麼如果當你git add文件後,才發現問題的嚴重性時,我們需要使用如下的命令,將丟棄stage中文件的修改:

git reset HEAD file:將已提交到stage中的文件修改丟棄,文件會回到工作區域,之後就需要通過11的操作將敏感數據丟棄掉。

6).刪除文件和無刪除文件後恢復到刪除文件之前

git rm file:刪除文件

當誤刪除文件時,通過11的操作丟棄對工作區的修改,git checkout – file就可以將誤刪除的文件恢復了


總結45:

1. 當你該亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout – file

2. 當你不但亂改了工作區某個文件的內容,還添加了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了第4條,第二步按第4條操作。

 

4. 遠程倉庫

 

1). 創建SSH KeyUbuntu

ssh-keygen -t rsa -C “[email protected]

id_rsa.pub中的字符串存放到你的github賬戶中的ssh管理中

2).將本地的repositorygithubrepository進行關聯,首先需要在github上建立一個repository,建立的操作比較簡單,照着做就可以了。

進入到本地倉庫的目錄

cd Local Repository Directory 

建立本地倉庫與遠程倉庫的關聯,origin代表遠程的倉庫名

git remote add origin https://github.com:Your Name/Remote Repository Name.git

將本地倉庫的所有文件推送到遠程倉庫中,將本地master分支的文件推送到遠程的orgin,第一次需要添加-u參數,它會將本地master分支的文件更新到遠程倉庫的master分支上,還會將本地的master分支與遠程的master分支進行關聯

git push -u origin master

說明:

Local Repository Directory:本地倉庫的倉庫目錄地址

Your Name:這個是你在github的名稱

Remote Repository Namegithub上的倉庫的名稱

從現在起,只要本地做了提交,就可以通過命令:

git push origin master

3).從遠程倉庫clone一個項目

當你在github上創建一個項目時,我們想查看項目時,可以通過如下代碼將遠程的項目clone到本地一份

git clone https://github.com/Your Name/Project Name.git

說明:

Your Name:項目創建者的github賬戶名稱

Project Name:項目名稱

github提供很多種協議來進行數據的傳輸,默認採用ssh,我們這裏採用的https

 

5. 分支管理

 

1). 創建分支並切換到分支

git checkout -b dev

or

git branch dev

git checkout dev 

2). 查看當前分支

git branch

3). master分支合併到最新的dev分支

切換回到master分支

git checkout master

master分支合併到最新的dev分支,當合並信息中包含Fast-forward爲快速合併,及master指針直接指向dev分支

git merge dev

4). 合併分支後,將不再使用的分支刪除

刪除dev分支

git branch -d dev

5). 當處理完衝突之後,使用如下命令查看衝突的內容

git log --graph --pretty=oneline –abbrev-commit

6). 當使用git merge name時,如果是Fast-forward合併方式,那麼合併並不會記錄除master分支的分支信息,使用如下命令將創建一個新的commit,並且要求輸入commit message信息

git merge –no-ff -m “merge with no-ff” dev

git log –graph –pretty=online –abbrev-commit

7). Bug分支

場景:當前你正在dev分支上開發東西,但是現在有一個緊急bug需要修復,這個時候我們可以將正在做的dev分支進行儲存,然後新建bug分支處理bug,等處理完bug,將儲存的dev分支重新提取出來接着進行開發

儲存dev分支

git stash

假定在master上處理bug

git checkout master

git checkout -b issue-101

/* 修復bug */

修復完bug後,切換回master分支,合併分支,刪除bug分支

git checkout master

git merge –no-ff -m “merged bug fix 101” issue-101

git branch -d issue-101

提取存儲的dev分支

git checkout dev

git stash list // 查看存儲的分支信息

提取有兩種方法:

git stash apply,但stash內容並不刪除,需要git stash drop刪除

git stash pop提取並刪除

git stash //再次查看存儲列表

8). Feture分支

場景:當我們開發新功能時,我們希望新建一個功能分支在上面開發,完成後,合併,最後刪除該分支。但是如果當你完成新功能時,準備合併到dev分支時,突然,由於種種原因,新功能目前不能添加。那麼這個時候需要刪除心功能分支,當你用git branch -d name時,錯誤提示,當前分支並沒有與其他分支進行合併,如果想徹底刪除該分支,需要使用-D參數

 

9). 多人協作的工作模式通常是這樣:

 

首先,可以試圖用git push origin branch-name推送自己的修改;

 

如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;

 

如果合併有衝突,則解決衝突,並在本地提交;

 

沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

 

如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream branch-name origin/branch-name

 

這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

10). 標籤管理

分支內打標籤

git checkout name

git tag tag_name

根據commit id打標籤

場景:如果現在是週五,但是本來週一打的標籤沒有打,通過git log查看到commit id後,然後通過命令git tag tag_name commit_id進行對特定commit打標籤

11). 查看所有的tag

git tag

12). 根據tag_name查看commit信息

git show tag_name

13). 打標籤的同時,添加標籤消息

git tag -a tag_name -m “message” commit_id

14). 刪除本地標籤

git tag -d tag_name

15). 推送標籤到遠程

git push origin tag_name

or

git push origin –tags:一次性推送所有的標籤

16). 刪除遠程標籤

git push origin :refs/tags/tag_name

 

6. 過濾文件

 

https://github.com/github/gitignore有完整的說明,只需要根據自己的實際情況將內容填入到.gitignore文件中

 

7. 配置別名

 

st表示statusco表示checkoutci表示commitbr表示branchunstage表示將修改恢復到工作區,last表示顯示最後一次提交的log信息,lg表示新的日誌信息顯示格式:

git config --global alias.st status

git config --global alias.co checkout

git config --global alias.ci commit

git config --global alias.br branch

git config --global alias.unstage 'reset HEAD'

git config --global alias.last 'log -1'

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

 

分支總結

 

查看分支:git branch

創建分支:git branch name

切換分支:git checkout name

創建+切換分支:git checkout -b name

合併某分支到當前分支:git merge name

刪除分支:git branch -d name

 

9 . 標籤總結

 

命令git tag name用於新建一個標籤,默認爲HEAD,也可以指定一個commit id

 

-a tagname -m "blablabla..."可以指定標籤信息;

 

-s tagname -m "blablabla..."可以用PGP簽名標籤;

 

命令git tag可以查看所有標籤;

 

命令git push origin tagname可以推送一個本地標籤;

 

命令git push origin --tags可以推送全部未推送過的本地標籤;

 

命令git tag -d tagname可以刪除一個本地標籤;

 

命令git push origin :refs/tags/tagname可以刪除一個遠程標籤。

 

10. 版權所屬

 

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章