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