Git的簡單應(yīng)用(1)

Git

分布式版本控制系統(tǒng)(DVCS)

在分布式版本控制系統(tǒng)(Distributed Version Control System,DVCS)中,客戶端不僅提取最新版本的文件快照,而且也會(huì)把代碼倉庫完整地鏡像下來。這樣,任何一處協(xié)同工作用的服務(wù)器發(fā)生故障,事后都可以用任何一個(gè)鏡像出來的本地倉庫恢復(fù)。目前,常用的DVCS系統(tǒng)有Git、Mercurial、Bazaar 以及 Darcs 等。


DVCS結(jié)構(gòu)

Git的介紹

主要特點(diǎn)

  1. 所有操作都是本地執(zhí)行;
  2. Git可及時(shí)發(fā)現(xiàn)在傳送過程中信息的丟失或文件的損壞;
  3. Git保證你提交后的數(shù)據(jù)不會(huì)丟失。

三種狀態(tài)

  1. 已修改(modified):文件發(fā)生了修改,但尚沒保存到數(shù)據(jù)庫中。
  2. 已暫存(staged):標(biāo)記已修改文件的當(dāng)前版本,在下次提交的快照中包含該文件。
  3. 已提交(committed):文件數(shù)據(jù)已經(jīng)安全的保存在本地?cái)?shù)據(jù)庫中。

工作流程

在工作目錄中修改文件。
(git add)暫存文件,將文件的快照放入暫存區(qū)域。
(git commit)提交更新,找到暫存區(qū)域的文件,將快照永久性存儲(chǔ)到 Git 倉庫目錄。

Git的應(yīng)用

1.Git的基本配置信息

git config --global user.name "<username>"
git config --global user.email "<email-address>"

完成全局 Git 用戶名和 Email 設(shè)置。設(shè)置后,Git默認(rèn)采用該用戶名和 Email 提交代碼。

git config --list

查詢當(dāng)前Git的配置。

2.Git的忽略文件

主要針對工作目錄下你不愿意提交的文件,比如你的密碼備忘錄。
Git 對于 .ignore 配置文件是按行從上到下進(jìn)行規(guī)則匹配的,意味著如果前面的規(guī)則匹配的范圍更大,則后面的規(guī)則將不會(huì)生效。下面列舉幾個(gè)常用的配置語法。

在倉庫的根目錄下,手動(dòng)創(chuàng)建Git 的 .gitignore 文件。

以斜杠“/”開頭表示目錄;
以星號“*”通配多個(gè)字符;
以問號“?”通配單個(gè)字符
以方括號“[]”包含單個(gè)字符的匹配列表;
以嘆號“!”表示不忽略(跟蹤)匹配到的文件或目錄。

3.初始化版本庫

git init

在當(dāng)前工作目錄默認(rèn)為本地倉庫,初始化Git版本庫。

4. 查看倉庫狀態(tài)

git status

查詢當(dāng)前版本庫的狀態(tài)。如果你在本地倉庫中更改了任何文件的內(nèi)容,Git會(huì)檢測到該文件,并在這里進(jìn)行狀態(tài)的顯示:

  • unstaged: 文件發(fā)生更改,但尚未提交。
  • untracked: 新創(chuàng)建的文件,尚未被Git進(jìn)行記錄。
  • deleted: 文件在本地倉庫中被刪除,但Git中尚未刪減

5. 文件的添加與提交

git add <file-name>

將指定文件添加到Stage暫存區(qū)。

git commit -m '<comments>'

將暫存區(qū)內(nèi)的文件提交到Git,并為本次提交添加評論comments。

6. 查看文件的提交記錄

git log

查詢文件的提交記錄。返回每次提交的哈希文件名、提交者、提交日期以及提交者對本次提交的評論。

7. 創(chuàng)建和刪除分支

默認(rèn)情況下,我們會(huì)在Master主線上進(jìn)行工作。但某些情況下,我們需要完成一些自己支線上的任務(wù),并希望不會(huì)影響到后續(xù)主線任務(wù)的開發(fā)。這時(shí),你可以在倉庫中創(chuàng)建分支用于開發(fā)支線任務(wù)。支線任務(wù)完成后,你也可以選擇是否合并到Master上。

git checkout -b <branch-name>

創(chuàng)建并切換到一個(gè)新的分支。

git checkout <branch-name>

切換到一個(gè)已有的分支。

git branch -l <branch-name>

創(chuàng)建一個(gè)新的分支。

git branch -d <branch-name>

刪除一個(gè)已有的分支。

git branch --list

顯示所有的分支以及當(dāng)前所在分支。

8. 代碼重置

某些情況下,你的文件需要恢復(fù)到之前的某個(gè)指定狀態(tài)。


  • 三種方式
    • -mixed:默認(rèn)方式。回退到之前某版本,只保留源碼,回退commit和index信息。
    • -soft:回退到之前某版本,只回退了commit的信息,不會(huì)恢復(fù)到index file一級。
    • -hard:徹底回退到之前某版本,本地源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容。
  • 回退至指定版本
git reset HEAD^          #回退所有內(nèi)容到上一個(gè)版本 
git reset HEAD^ a.py     #回退a.py這個(gè)文件的版本到上一個(gè)版本 
git reset HEAD~3         #向前回退到第3個(gè)版本 
git reset –hard origin/master #將本地的狀態(tài)回退到和遠(yuǎn)程的一樣 
git reset 057d           #回退到某指定版本 

9. 遠(yuǎn)程管理倉庫

git remote add  <remote-name> <repository-URL>

在遠(yuǎn)程服務(wù)器URL上添加一個(gè)遠(yuǎn)程倉庫<remote-name>。

git remote show <remote-name>

查詢指定主機(jī)的詳細(xì)信息。

git remote rm <remote-name>

刪除指定的遠(yuǎn)程主機(jī)。

git remote rename <remote-name> <new_remote-name>

修改遠(yuǎn)程的主機(jī)名。

10.推送到遠(yuǎn)程倉庫

git push <remote-name> <local-branch-name> :<remote-branch-name>

將本地分支上的更新,推送到遠(yuǎn)程主機(jī)指定的分支上。

git push -u <remote-name> <local-branch-name>

將本地的分支推送到<local-branch-name>主機(jī),同時(shí)指定其為默認(rèn)主機(jī)。

git push --all <remote-name>

將所有本地分支都推送到origin主機(jī)。

11.更新與合并

git fetch <remote-name> <local-branch-name>

從遠(yuǎn)程獲取最新版本到本地,但不會(huì)自動(dòng)merge。

git diff <source-branch> <target-branch>

比較<source-branch>分支和<target-branch>分支的差別。(幫你讀懂diff

git merge <branch-name>

合并指定的其他分支到當(dāng)前分支。

git pull <remote-name> <local-branch-name>

從遠(yuǎn)程獲取最新版本并直接合并到本地。沒有fetch+diff+merge組合的安全性高。

12. Rebase

rebase用于把一個(gè)分支的修改合并到當(dāng)前分支。

假設(shè)你現(xiàn)在基于遠(yuǎn)程分支"origin",創(chuàng)建一個(gè)叫"mywork"的分支。一段時(shí)間后,在origin和mywork兩個(gè)分支上分別都發(fā)生了不同的修改。

git checkout mywork
git rebase origin

你的"mywork"分支里的每個(gè)提交(commit)取消掉,并且把它們臨時(shí) 保存為補(bǔ)丁(patch)(這些補(bǔ)丁放到".git/rebase"目錄中),然后把"mywork"分支更新 為最新的"origin"分支,最后把保存的這些補(bǔ)丁應(yīng)用到"mywork"分支上。

13. 克隆倉庫

git clone <path-to-clone-repository>

創(chuàng)建一個(gè)指定倉庫的克隆版。

Reference

充分了解 Git 并入手單人開發(fā) http://www.lxweimin.com/p/b238de250c06
Git 學(xué)習(xí)筆記(初識(shí) Git) http://www.lxweimin.com/p/32dcad25b29a
Git版本恢復(fù)命令reset http://www.cnblogs.com/0616--ataozhijia/p/3644482.html
https://try.github.io/levels/1/challenges/1
Git遠(yuǎn)程操作詳解 http://www.ruanyifeng.com/blog/2014/06/git_remote.html
git rebase簡介(基本篇) http://blog.csdn.net/hudashi/article/details/7664631

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容