Git的初步使用教程
01-29
前言
繼上篇初步認識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 add
和git 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 |