Git 命令實戰入門 ,奶媽級教學

我不會用官方的語言告訴你Git 是什麼,對此我表示深深得歉意~~
在我看來像CSDN、博客園、掘金等博客交流平臺就是小的“GitHub”,只不過在這裏更多的是一些零零散散的筆記或者文章,其實Gihub也是一樣的“交流(友)社區",這裏有一本正經的開源項目,你可以在上面學習別人的開源項目也可以上傳屬於自己的作品,也有各種沙雕的個人“作品”,比如 The F**k、比如:P站logo生成器,以及各種奇葩的交友方式 /滑稽。咳咳,總的來說呢,Github 是一個供大家“學習”的平臺,同時也是一個學習交流社區,就醬。我只想帶你入坑,至於你學的怎麼樣,我包不負責 /摳鼻
Emmm.......

閱讀說明:

總文加起來 20分鐘可以看完,我把總文分成了 Git命令實戰 和 GitHub 運用 兩部分,本篇是 Git 命令實戰,各位不用擔心~常用的Git命令兩隻手就可以數過來,無非就是提交和下載,好了那麼我們開始進入入坑 學習吧。

簡單的安裝

Git的安裝非常精簡,基本一步到位:
Windows點進去選擇Window,它會自動安裝好
MacOS
方法一:推薦直接下載Xcode,直接在App Store搜索(免費)xcode是蘋果的集成開發環境(IDE)下載好這個軟件不僅Git很多環境都給你自動配置好了
方法二:通過第三方homebrew安裝(不推薦):
在Mac終端輸入

# 安裝 homebrew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
# 安裝Git
brew install git

Linux
Ubantusudo apt-get install git
Centosyum install git

Emm。。。。git的安裝基本不會出意外,出了意外你順着網線來打我
接下來就開始動手實操了,讓我們先創建一個文件夾吧,不妨就叫Git,作爲練習的主要目錄,好了就開始吧

初始化一個Git倉庫

創建一個 Git 目錄,我們把這個目錄變爲可以用GIT管理的倉庫! git init命令把這個目錄變成Git可以管理的倉庫

mkidr Git
cd Git
git init

創建練習對象

然後就可以在倉庫愉快的玩耍了,我們先搞一個txt文件練習一下

vim demo.txt

這條命令會 創建 並且 進入 demo.txt, 按下 i 進入 vim編輯模式,就可以在這個文件裏輸入內容了!
我們輸入:

this is 1 test
~
~
~
~
~

然後 按下esc退出vim編輯模式, 然後按下(冒號) : 並在冒號後面輸入 wq 然後回車,我們就自動關閉並且保存這個txt文件了.
隨後我們用 git add 命令把 txt 文件放到倉庫裏,隨後用git commoit命令 把文件提交給倉庫,

git add demo.txt
git commit -m “first commit”

返回:

[master c819da4] first commit
2 files changed, 2 insertions(+), 3 deletions(-)
create mode 100644 demo.txt

你可以這樣理解, 就像寄快遞一樣, 我們把快遞交給快遞小哥(add),隨後快遞小哥把快遞送到達物流倉庫(commit)-m "first commit" 是提交說明,-m 是固定格式,引號裏面是自定義內容,就好像你郵寄快遞的留言一樣,可以對本次“郵寄”做一個說明.

第二次修改

然後我們對 demo.txt 修改添加一些內容,輸入 vim demo.txt 我們會進入demo.txt文件,然後按下 i 鍵,進入vim 編輯模式,我們寫入:

this is first test
這是第二次修改

寫完後,按下 esc 鍵退出vim編輯模式,進入vim命令模式, 然後輸入(冒號) :wq 回車,這樣就寫入並且退出了。
其實,我們每一次的修改git它都有記錄,我們輸入 git diff demo.txt 命令可以查看,這個文件發生了哪些不同. diff 是different的意思

[root@StrawberryJam Git]# git diff demo.txt
diff --git a/demo.txt b/demo.txt
index 2fd7f63…a9b2fb1 100644
— a/demo.txt
+++ b/demo.txt
@@ -1,2 +1,2 @@
this is first test

+這是第二次修改

我們輸入 git status 查看git倉庫的狀態,看看有哪些是要給“快遞小哥”,有哪些將要送往“物流中心”的

[root@StrawberryJam Git]# git status
位於分支 master
尚未暫存以備提交的變更:
(使用 “git add …” 更新要提交的內容)
(使用 “git checkout – …” 丟棄工作區的改動)
修改: demo.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

上面提示告訴我們, demo.txt 已經修改過了,我們還沒有提交給倉庫,接下來我們進行第二次提交,也就是我們修改過後的又一次提交,輸入 git add demo.txt 命令, 然後輸入 git commit -m "second commit"

[root@StrawberryJam Git]# git add demo.txt
[root@StrawberryJam Git]# git commit -m “second commit”
[master 2f14c19] second commit
1 file changed, 1 insertion(+), 1 deletion(-)

我們就完成第二次修改的(發送)提交了, 是不是很簡單!!,我們再輸入git status 看一看

[root@StrawberryJam Git]# git status
位於分支 master
無文件要提交,乾淨的工作區

到這裏,我們已經學會了 如何初始化一個GIT倉庫和對文件的修改及提交。我們知道Git是一個版本控制系統,既然我們對文件修改了,那麼就一定還可以回到上次的版本,這就好比文件備份,接下來讓我們嘗試一下回到“備份”的文件

第三次修改

輸入 vim demo.txt 命令進入文件,按 i 鍵 進入 vim 編輯模式,輸入新的內容

this is first test
這是第二次修改
這是第三次修改



按下 esc 退出編輯模式 輸入 :wq 回車後保存並且退出。
輸入 cat demo.txt 命令查看一下文件是否有我們修改的內容

[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改

沒有問題後我們就可以把第三次修改的文件進行提交了!再次輸入 git add demo.txtgit commit -m "thirt commit"

git add demo.txt
[root@StrawberryJam Git]# git commit -m “third commit”
[master 3b15c27] third commit
1 file changed, 1 insertion(+)

回到“備份”!!

到這裏我們一共對文件進行了三次修改,接下來讓我回到第二次修改的文件試試,輸入 git reset --hard HEAD^ , git reset --hard 是固定格式記住就好了,HEAD^ 是回到上一個版本,HEAD^^就是上上個版本

[root@StrawberryJam Git]# git reset --hard HEAD^
HEAD 現在位於 2f14c19 second commit

提示表明,我們在第二次修改的文件版本了,不妨輸入cat demo.txt 預覽一下

[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改

果然,我們退回到了第二次修改後的版本文件,如果我們又後悔了怎麼辦,不用擔心依然可以回到第三次修改的版本文件,首先我們輸入 git reflog可以查看git命令操作日誌

[root@StrawberryJam Git]# git reflog
2f14c19 HEAD@{0}: reset: moving to HEAD^
3b15c27 HEAD@{1}: commit: third commit
2f14c19 HEAD@{2}: commit: second commit
c819da4 HEAD@{3}: commit: first commit

最前面的 2f14c19 是我們操作對應的ID ,(ID都是隨機分配的) 我們可以看到 第三次提交的 ID是 3b15c27,那麼我就可以輸入 git reset --hard 3b15c27 回到第三次提交的版本文件

[root@StrawberryJam Git]# git reset --hard 3b15c27
HEAD 現在位於 3b15c27 third commit
[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改

就這樣我們又再次回到了第三次版本是不是很簡單,看來想要回到指定版本只需要通過 git reflog 查看操作ID,然後 git reset --hard 就可以回到“備份”版本文件了!這個HEAD是一個箭頭指針, 每當我們git reset--hard ID 就代表HEAD指向了這個ID,那麼我們當前的版本就是這個HEAD指向的版本。

修改的管理~

多次修改一次提交

現在我們知道了 commit 是在 add 之後,如果對文件修改一次後,我們git add 把“郵件”(文件)交給快遞小哥,此時我們又修改了一次文件,如果這時候使用git commit 命令,那麼Git只會記錄我們第一次修改的文件,也就是說我們通過git add 把第一次修改後的文件交給快遞小哥後,他就離開了準備發往物流中心,所以此時使用git commit 命令只會記錄第一次修改的文件。一句話總結來說:每次修改都需要 git add一下,最後統一git commit 一起提交文件。

撤銷修改:

接下來我們學習修改的撤銷,我們先看一下git的 status

[root@StrawberryJam Git]# git status
位於分支 master
無文件要提交,乾淨的工作區

好了我們對demo.txt 進行第四次內容的添加,vim demo.txt 後文件的內容

[root@StrawberryJam Git]# vim demo.txt
[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改
這是第四次添加內容

我們在看一下git 的 status

[root@StrawberryJam Git]# git status
位於分支 master
尚未暫存以備提交的變更:
(使用 “git add …” 更新要提交的內容)
(使用 “git checkout – …” 丟棄工作區的改動)
修改: demo.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

我們可以看到 使用 “git checkout – …" 丟棄工作區的改動 這個提示,那我們不妨試一試輸入 git checkout demo.txt,然後再cat 一下文件

[root@StrawberryJam Git]# git checkout demo.txt
[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改

果然撤銷了 我們的第四次添加的內容 ,我們再看看git 的status

[root@StrawberryJam Git]# git status
位於分支 master
無文件要提交,乾淨的工作區

到這裏並沒有什麼大問題,因爲我們修改文件後並沒有對文件進行add、 commit 等操作,那麼如果我們是在git add 之後想要撤銷怎麼辦呢,我們重新寫入 “這是第四次添加的內容”,並且執行了 git add demo.txt 命令

[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改
“這是第四次添加的內容”
[root@StrawberryJam Git]# git add demo.txt

就在add 之後,我後悔了,我不想提交我想撤銷怎麼辦,git status 告訴了我們答案

[root@StrawberryJam Git]# git status
位於分支 master
要提交的變更:
(使用 “git reset HEAD …” 撤出暫存區)
修改: demo.txt
[root@StrawberryJam Git]#

提示已經很明確了, 使用 “git reset HEAD …” 撤出暫存區 那我們不妨試一試

[root@StrawberryJam Git]# git reset HEAD demo.txt
重置後撤出暫存區的變更:
M demo.txt

注意!!這樣我們的 demo.txt 文件只是回到了 git add 之前的狀態,並沒有對文件內容做出撤回處理,先通過 cat 看一下文件再status一下文件狀態

[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改
“這是第四次添加的內容”

[root@StrawberryJam Git]# git status
位於分支 master
尚未暫存以備提交的變更:
(使用 “git add …” 更新要提交的內容)
(使用 “git checkout – …” 丟棄工作區的改動)
修改: demo.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

此時我們就可以再次使用 git checkout demo.txt 對文件內容作出撤回處理了

[root@StrawberryJam Git]# git checkout demo.txt
[root@StrawberryJam Git]# cat demo.txt
this is first test
這是第二次修改
這是第三次修改
[root@StrawberryJam Git]# git status
位於分支 master
無文件要提交,乾淨的工作區

Ok ~~ 那麼如果我又add 了 又 commit了腫麼辦,那就直接 回到“備份” 參考上一節嘍~

文件的刪除

新建一個test.txt 文件並且寫入內容,vim test.txt 創建並且打開 文件,寫入

這是一個即將被Kill掉的文件
~
~
~
~

隨後 git add 並且 commit 該文件

[root@StrawberryJam Git]# git add test.txt
[root@StrawberryJam Git]# git commit -m “bye bye”
[master c2f3cdf] bye bye
1 file changed, 1 insertion(+)
create mode 100644 test.txt

然後我們的刪除命令 rm test.txt, 系統會問我們要不要刪除文件,回覆 y 好了

[root@StrawberryJam Git]# rm test.txt
rm:是否刪除普通文件 “test.txt”?y

但是這裏,刪除的只是我們工作區的文件,也就是說 GIT 還有我們的備份的,只是我們當前的版本看不到了而已,那我們如何把這個“備份”也給Kill掉呢,git status 給出了答案

[root@StrawberryJam Git]# git status
位於分支 master
尚未暫存以備提交的變更:
(使用 “git add/rm …” 更新要提交的內容)
(使用 “git checkout – …” 丟棄工作區的改動)
刪除: test.txt
修改尚未加入提交(使用 “git add” 和/或 “git commit -a”)

告訴我們可以 使用 “git add/rm …” 更新要提交的內容 那我們不妨用 rm 把test.txt從“備份”列表裏刪除,然後 commit 提交上去重新“備份”確認刪除了

[root@StrawberryJam Git]# git rm test.txt
rm ‘test.txt’
[root@StrawberryJam Git]# git commit -m “It is gone”
[master 815d827] It is gone
1 file changed, 1 deletion(-)
delete mode 100644 test.txt

如果是一不下心刪除錯了文件怎麼辦呢? 上面的git status 還有另一個選項
使用 “git checkout – …” 丟棄工作區的改動 這樣你就可以撤銷你的rm 命令,當作什麼都沒發生 = .=
歡迎訪問我的博客網站:wangwanghub.com

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