python git操作、安裝及git誤操作版本找回

爲什麼標題中有python那,因爲python比git好理解多了。所以,據我瞭解,好多學會python的,好不容易找到了工作,卻因爲對git很陌生,結果沒過了試用期。你要知道,在工作中大家都是協同開發的,那麼代碼怎麼來共同維護那?git就幫助我們很好的解決了這個問題。

git是什麼?github是什麼?

不知道你們剛接觸git的時候對這個兩個詞迷不迷,反正我是迷了。現在我要介紹git,肯定是要先幫你們把這兩個概念說清楚。
git:是一種版本控制系統,是一種代碼版本控制的工具,也是一個命令,可以離線操作,本地倉庫,可以離線管理。
github:是一個網站,是一個基於git實現的在線代碼版本控制系統,不可以離線操作,遠程倉庫可以遠程託管自己的代碼。
git可以通過命令把自己的代碼與github上的同步,也就是本地倉庫和遠程倉庫代碼可以協同工作。本地的你可以自己怎麼修改都行,要與團隊同步的時候,你只要把確定無誤的本地的修改提交就ok了。

git的簡易安裝
檢查自己用的系統上是否裝有git,輸入git,看彈出內容,聰明的你可以自行判斷有沒有安裝了。git的各個版本的具體安裝在這裏就不多敘說了,很簡單。特別的如果你用的剛好是linux系統的話,一般一條命令就可以了。sudo apt-get install git 老一點的Debian或Ubuntu Linux,要把命令改爲sudo apt-get install git-core,因爲以前GNU Interactive Tools有也叫git,結果git就只能叫git-core了。後來隨着git越來越有名,GNU Interactive Tools就被改成gnuit,git-core自然而然就是git了。

從創建本地倉庫開始:第一個git命令git init
創建本地倉庫,其實這裏的倉庫就是一個文件夾,用git管理之後自然就成了我們的版本庫了,創建的版本庫的位置你可以隨意定,首先在你喜歡的地方創建一個文件夾,下邊是我的文件夾,在沒有成爲git倉庫之前,就是一個普通的文件。

這裏寫圖片描述

之後介紹我們第一個git命令:git init 初始化版本庫,git init 後的文件結構,多了.git說明你的git倉庫已經創建成功,用ls是看不到.git這個目錄的,因爲這個目錄是隱藏的,隱藏的原因就是不想讓你亂修改,所以儘量不亂改,以免把倉庫破壞,現在hello_git這個文件夾就是我們的git倉庫了。

這裏寫圖片描述

現在這個倉庫是空的,git也沒有開始幫你追蹤相應的文件。我們下面創建一個readme.txt,當然這個readme.txt一定要在你剛剛創建的倉庫的文件夾或者子文件夾下,不然git再強大也不能幫你追蹤的。

通過git status來引出另外的個命令 git add 和 git commit,添加新文件到本地倉庫
git status 查看當前倉庫的文件更改的記錄和狀態,輸入之後就會顯示。通過命令git status的操作之後,會顯示當前git倉庫的所有文件動態。
untracked files下邊跟的是我剛剛創建的readme.txt,這就是新建的文件和git倉庫還沒有關聯的。這時候我們的這個文件是處在工作區的。下邊我們通過git add readme.txt這條命令,把文件添加到暫存區,現在文件是在暫存區,再按git status 會顯示待提交,因爲改動已經被暫存區保留。下一步
git commit -m 提交了readme.txt,-m後邊跟着你更改的內容,養成好的習慣一定要寫。上邊的一系列操作,就完成了新建文件夾提交到本地版本倉庫,並且這個文件已經被追蹤,所有的更改都將被git記錄,截圖如下。

這裏寫圖片描述
在工作中,還有一步就是push到你們公司代碼託管的總的網上的倉庫,後邊講。
下面我修改readme.txt,並且新建readme2.txt,之後看下git status的狀態。

這裏寫圖片描述

上邊顯示的是被追蹤了的文件的修改,提示我修改了但是沒有添加到暫存區,第二個是新文件,並沒有追蹤修改。
之後把這兩個修改都提交:
git add reademe.txt reademe2.txt 可以這樣寫,也可以git add . 把所有的更改一次性添加到暫存區。
這裏寫圖片描述

通過git diff 文件名來查看修改文件的具體內容
查看修改的內容,git diff,比如我們在reademe.txt添加內容,然後看看我們修改了什麼,爲了防止我們之前修改的內容時間過長了,不知道修改了什麼,用git diff就可以看到底哪裏被改動了,之後決定到底要不要提交。
這裏寫圖片描述
下邊+hello python就說明我們在readme.txt的最後增加了hello python,如果是-hello python 就說明我們刪除了這一行。截圖就不上了,你們可以自己做測試。

工作區,暫存區,本地倉庫,遠程倉庫理解

  • 工作區:工作區很好理解,就是你的git倉庫根目錄下的所有文件以及文件夾,我的就是hello_git文件夾下的所有區域,只要有變動,git status就會有記錄。

  • 暫存區:英文叫stage, 或index。一般存放在 “.git目錄下” 下的index文件(.git/index)中,所以我們把暫存區有時也叫作索引(index),git add 之後就是把更改提交到暫存區。

  • 本地倉庫:git commit 之後就把暫存區的文件添加到本地倉庫,當我們初始化一個git倉庫時,git會自動創建一個master分支和一個指向master的HEAD指針。
    其實提交到本地倉庫的代碼一共是經過了三個地方:工作區 add 到暫存區 commit 到分支(這裏是master分支)。

  • 遠程倉庫:push操作後,會把本地的修改提交到遠程倉庫。

以上說的都是正向的操作,下面說點撤回的,工作中難免出點小失誤。

用到的git命令 git checkout – file, git reset (–hard) file, git reflog
下面分幾種情況介紹撤回操作。

  • 現在你處在工作區,修改readme.txt,你準備提交之前檢查了文件。文件多加了點沒用的東西,比如說加了一句I am the most handsome man in the world。因爲在工作區,你可以手動刪除這句,手動恢復成原來的樣子。不過在你修改過後可以試一下git status,下圖所示,添加一兩句手動修改還可以接受,但是如果你把整個文件改的亂的不要不要的,那麼就要通過git checkout – file來進行恢復了,其實git已經很友好的進行提示你,可以用git check out 丟棄工作區的更改。

這裏寫圖片描述

git checkout – readme.txt之後 git status查看更改內容,現在已經是乾淨的工作區了。下面我們是不僅添加了這句話,已經add到了暫存區,又作了修改,現在checkout撤銷修改就回到添加到暫存區後的狀態。總結就是checkout就是當前文件修改了之後,checkout就會把當前文件回到上一步的狀態,沒有add回到版本庫一樣,add之後修改回到add之前的狀態,commit之後修改就回到commit之前的狀態。
注意:git checkout – file命令中的–很重要,沒有–,就變成了“切換到另一個分支”的命令。

  • 假如你把修改之後的文件add到了暫存區,還沒有commit,並且想回到沒有修改的狀態,那麼就要用到git reset了。下圖命令詳解:剛開始顯示readme.txt在暫存區等着被commit,然後我們需要把修改的文件撤回,首先通過git reset HEAD readme.txt,把文件從暫存區拉到工作區,現在git status就看到了現在的文件回到了工作區,並且顯示已經修改。看下已經回到工作區,可以任我們擺佈了,你可以手動刪除,也可以checkout,好吧隨你的開心。然後git status,打開文件看下,I am the most handsome man in the world這句話已經沒有了,好吧,我的內心毫無波瀾,並且有點想笑!
    這裏寫圖片描述

  • 如果你修改了,add了而且還commit了但是並沒有push,還好,可以挽回你想要回復到未修改之前的內容,那麼就要用到版本回退了。我這裏介紹使用git reflog來恢復。git reflog之後我們可以看到輸出信息前邊顯示的是commit id的簡化版,這就夠了,這就是每個版本的記錄。接下來我們可以根據id進行版本之間的回覆了。通過git reset –hard HEAD^因爲HEAD本身指的是當前版本加上^之後就是回退到上一個版本,也就是commit id是af1707c這個版本。注意查看我們添加的內容已經沒了,然後你又想了想,這一句還挺重要的,還是加上去把。那麼還可以根據id來回復,命令如下git reset –hard 882032f,又回到了添加的時候的狀態了。那麼現在你就可以根據id來進行commit之後的不同版本之間的自由穿梭了吧,有的博客中可能會給你這個操作,–hard這個參數可能沒說清楚,會導致你的本地文件丟失,如果你恢復a版本的時候加了–hard HEAD沒加特別指定的文件名字,就代表硬盤上的所有文件全部同步到a版本,那麼你再工作區的修改的其他文件就也會對應更改,甚至新建的文件會丟失,所以在沒有commit之後慎用–hard,git reset commit id就行了。
    這裏寫圖片描述

根據文章和截圖你能理解所有操作,在工作中使用git的命令就遊刃有餘了。真正的工作中使用最多的就是git status git add git commit git push了,由於時間和篇幅有限,git的遠程連接,clone,push等,以及github倉庫搭建與本地關聯部分之後抽時間會更新。

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