標籤:

Git的初步使用教程

前言

繼上篇初步認識git與github之後,你一定覺得很不過癮,為什麼關於git命令行的這一重要部分像被閹割了一樣,不要急,今天我就來說說git的使用!(前方多圖高能預警!!!)

博客原文出處

遠程倉庫的創建

  • 首先在你可愛的GitHub創建一個倉庫,這次我在初始化倉庫的時候沒有勾選自動生成readme,所以界面就會呈現如圖所示,它會提示你在本地該怎麼做!

git init—初始化本地倉庫

  • 要使用Git來管理版本,那麼必須先初始化倉庫。Git使用git init來初始化倉庫的。如果初始化成功,就會在文件夾下生成一個.git的隱藏文件,這個隱藏文件就是管理我們當前倉庫數據的地方,別手抖刪除它噢!

git status—查看倉庫的狀態

  • git status命令用於顯示Git倉庫的狀態。這是一個非常常用的命令,貫穿你整個Git生涯也不為過哦!所以請務必牢記!工作樹和倉庫在被操作的過程中,它們的狀態就會被不斷改變,接下來我們看下我們初始倉庫的狀態!

  • 我們可以看到我們當前所處是在master分支,紅色的README.md處於untracked,它提示我們可以通過git add <file>這個命令來讓它被Git倉庫管理。

git add—向暫存區中添加文件

  • 之前Git目錄下的README.md文件並沒有被Git管理,也就是說它並不會被記入Git倉庫的版本管理對象中,要想讓它成為Git倉庫的管理對象,就使用git add <file>這個命令,讓文件加入暫存區(Stage或Index)中。

  • 這裡我使用了git add .這個命令,其實這個命令跟git add <file>命令的區別就是前者會把你當前文件夾內的所有文件都被加入到Git的暫存區,而後者是只讓你指定的文件加入到Stage(實際使用視個人情況而定)。
  • 我們再來看此時READMEME.md的狀態已經被改成了Changes to be committed。那麼接下來你就可以將當前Stage中的文件實際保存到倉庫的歷史記錄中。抑或你add錯文件,你可以使用git rm --cached <file>命令讓文件回退出Stage,這樣之後你提交文件就不會包含這個文件。

git commit—保存倉庫的歷史記錄

  • git commit命令可以將當前Stage里的文件實際保存到倉庫的歷史記錄中。

  • 切記在commit的時候一定要添加你這次改動了什麼的提示信息,不然當別人去看你的提交或者以後你自己去查的時候,可能並不清楚這一次改動是做了什麼,為了以後省事一定要加上-m 「message」噢!

git log—查看提交日誌

  • git log這條命令可以讓你非常清楚的看到你以往倉庫的提交的日誌,包括可以查看什麼人在什麼時候進行了合併或者提交,以及操作前後有什麼差別。

  • 日誌中我們可以看到一行黃色的commit,它旁邊有一串』32912ba99e….』的哈希值,記住!這串哈希值是指向這個提交的!
  • 然後你可以看到下面是提交時間和人員還有做看什麼的信息。
  • 當然,如果你想查看某個指定文件的提交日誌,你也可以使用git log <file>這個命令來看指定文件的日誌。

git diff—查看更改前後的差別

  • git diff可以查看工作樹、暫存區、最新提交之間的差別。
  • 我們可以向README.md中添加些內容來看看這個命令的效果。

  • 這裡我添加了一句話,所以我們可以看到一行綠色的」+」顯示,如果我們刪除了某些東西,就會出現」-「。
  • 在我將修改後的README文件添加到Stage之後,再用git diff HEAD去看看本次提交與最新一次提交的差別,我們就能一目了然。HEAD是指向最新一次提交的指針。

  • 最好養成在commit之前,看下本次提交與最新一次提交的差別,這樣就能保持一個很好的代碼管理習慣噢!

創建分支

分支的概念

  • 在我們初始的github倉庫的時候,會生成一個默認的初始分支,那就是

    master,這也就是我們常說的主分支,其它個人創建的都是子分支。子分支會擁有當前master分支的一切代碼,然後在這基礎上去做自己的事,而不會干擾到master的正常開發。等分支的需求做完了,可以合併到master分支,這樣master分支就會擁有子分支所做的功能了,是不是很酷!!!

git branch—顯示分支一覽表

  • git branch這個命令可以將當前Git倉庫的所有分支都顯示出來,且能讓你清楚的知道當前你所處的分支是哪一條。

  • 因為我現在沒有創建分支,所以默認只有一條master分支,並且注意在它前面有個星號,這就代表了你當前所處分支是哪一條。

git checkout -b—創建、切換分支

  • 我們可以用git checkout -b <branch>的命令直接創建分支,並且切換到這個新創建的分支上

  • 當然你也可以把上面這個命令拆分,git branch <branch>用來創建分支,git checkout <branch>用來切換到這個分支上。

  • 現在我們處於B分支,如果我們在這時候去修改README.md文件,看會不會影響到master分支下的README.md文件,然後進行提交,就能把改過的文件添加到B分支上面去了,下圖B分支內的README文件的修改情況。

  • 然後我們切換到master分支,去看看README文件有沒有什麼改動,我們可以清晰的看到原本README裡面我加的那句話,在master分支的時候沒有了!

  • 然後我們再回到剛才的B分支,用git checkout -或者git checkout B都是一樣的操作,前者的那個「-」就是返回到上一個分支的意思。

git merge—合併分支

  • 既然我們創建了分支,並且在分支做了一些代碼的改動,而我們也希望master分支也擁有子分支的這些代碼,此時我們就要將子分支合併到master上,這樣master分支就擁有了子分支的一切代碼,先切換到master分支,再合併B分支,此時master分支下的README就有了B分支修改的內容了。

git log –graph—以圖表形式查看分支

  • 此時我們可以通過git log --graph這條命令來查看所有分支所做的一切commit,非常的簡潔明了。

更改提交的操作

git reset—回溯歷史版本

  • 通過前面的幾次練習,想必你已經基本熟悉Git的基本操作了吧!但是假如有一天我做的代碼更改提交上去之後,我發現之前有一次的代碼提交版本我現在需要,而我現在想不起來哪次的提交了,所以這時候用到了git reset命令和之前提的哈希值了。但是我們提交了那麼多次,哪裡能記得住哪次提交的哈希值,而且它還那麼長,是不?所以這時候我們可以在master分支下執行git reflog指令來查看當前倉庫的操作日誌,一目了然的每次提交操作。

  • 既然拿到了我們想要的哈希值,那麼我們就能回溯到那個版本去了,因為我回溯到了剛創建A分支的時候,這時候的README是沒有修改的,所以B分支修改了內容之後被合併到master分支時的內容也就沒有了!

  • 在回溯後的版本的時候,我們想要在最初始版本的時候增加分支C並且修改README文件,,這樣在歷史版本中我們相當於在過去添加了C分支,當我們再回溯到B分支被合併之後的版本的時候,master再去合併C分支修改的內容的時候,master應該同時擁有B和C的代碼修改。但是我們最後合併C分支的時候,因為master中現在已經擁有了B分支的修改代碼,而C是沒有的,所以這時候合併C的時候會出現代碼衝突,這時候需要我們人工去修改。

  • 解決衝突之後,我們就能使用git addgit commit兩個命令來提交到master的歷史記錄里。

git commit –amend—修改提交信息

  • 假如我們提交之後,感覺提交信息有點不符合我們最近這次次提交的工作,我們想要修改一下這個提交信息,那該怎麼做呢?這時候用git commit --amend命令來修改提交信息,這時候我們可以看到提交信息被我改成了「Fix C」。

#推送到遠程倉庫

git remote add—添加遠程倉庫

  • 既然我們本地倉庫已經添加修改完畢了,那麼就要把本地倉庫給push到遠程倉庫去。但是Git怎麼才能知道我們要push到哪個倉庫呢?這時候就該用我們的git remote add命令來指定要push到哪個倉庫了。

git push—推送至遠程倉庫

  • 既然我們已經指定了要推送的倉庫地址,那麼接下來只要我們push當前分支過去就OK拉!我們可以看到遠程倉庫的master已經擁有了本地master分支的代碼了,如果想要push本地的A、B、C分支至遠程倉庫,那麼同樣的操作就行。

結束語

好了,Git的基本操作基本都在這了,是不是現在感覺有點暈暈的,沒事!這是正常的,趕緊自己去動手試試,你就會馬上融會貫通的!


推薦閱讀:

高大上的Git
說說Git reset 與 revert 的故事
Visual Studio Code 使用Git進行版本控制

TAG:Git |