GIT的介紹就不多說了。這裡只是簡單的寫些入門的操作。
重點介紹曆史版本的查看和控制相關的操作。
一切從簡,不講大道理,只講簡單的操作。
原創文章,如有轉載,請註明出處:http://blog.csdn.net/yihui823/article/details/6681214
以銅為鏡,可以正衣冠;
以史為鏡,可以知興替;
以人為鏡,可以明得失
我們要以舊版本為鏡,可以知道自己的成長曆程
進入git控制的目錄,試試 gitk
(哇~有圖形了啊)
呵呵,別激動哦。
我們簡單的描述一個例子:a)初始化操作
有兩個檔案file1.txt和file2.txt
1, 初始化的時候就有這兩個檔案
操作:
git init
git status
git add .
git commit -m “init version”
2, 在master分支上修改了file1.txt,並提交
操作:
(修改file1.txt)
git add file1.txt
git commit -m “change file1”
3, 然後建立分支banana,並切換到banana分支上
操作:
git branch banana
git checkout banana
4, 修改file1.txt和file2.txt,並提交。
操作:
(修改file1.txt和file2.txt)
git add file1.txt file2.txt
git commit -m “change by banana”
這個時候,我們可以輸入 gitk,查看一下當前的版本情況。如:git-001
5, 然後,切換到master分支上,修改file2.txt,並提交。
操作:
git checkout master
(修改file2.txt)
git add file2.txt
git commit -m “change by master”
輸入gitk,查看目前的版本情況,如:git-002
b)發現問題需要查看曆史版本
我們現在發現當前的版本有點問題,還不能提交到版本庫。
1,我們需要從git commit中返回.
則輸入:
git reset --soft HEAD^
解釋一下,HEAD是當前分支的最新版本。^表示父節點。當前節點的父節點,就是上一次提交的版本。也就是標記為“change file1”的版本。
問為什麼不是”change by banana”這個版本呢?不同的分支哦。”change by banana”是banana分支的最新代碼,和master分支不同的。
這個時候輸入
git status
看看,是不是顯示file2.txt修改了沒有提交呢。
2,我們需要從git add中返回
再仔細查看之後,我們發現file2.txt真的寫錯了,需要返回到git add之前的狀態。
輸入:
git reset -q file2.txt
這個時候,file2.txt就回到瞭解放前了。用git status查看一下,file2.txt是”change not staged for commit”狀態。
3,回到沒有做過的情況
我們最終確定,最後一次修改的file2.txt是無用的代碼,我們需要廢棄掉。
注意,這個操作不能恢複的哦。
git reset --hard
這個命令,不能指定具體的檔案。是把當前的修改全部清除,恢複到最後一次提交的版本。
這個時候,用gitk查看一下:git-003
已經徹底回複到了“change file 1”的版本了。
4,直接回複到某個版本
我們現在切換到banana分支。
git checkout banana
然後用gitk看一下。可以看出,我們之前的操作,對banana分支一點影響也沒有。現在我們需要把banana分支回複到初始狀態,但是當前的改動的代碼還是需要留著。我們可以看,init版本是目前的版本的父節點的父節點。我們可以這麼操作:
git reset --soft HEAD^^
然後用gitk看一下:git-004
最近的版本已經變成了init version了。所有的改動都是add未提交狀態。
5,得到當前最新代碼
最後。我們把file1.txt和file2.txt都刪掉。我們需要從版本庫中取得當前最新的代碼。
很簡單:
git checkout master
如果是要banana分支的最新代碼,則:
git checkout banana
以上的操作,我們知道了如何查看版本分支,和如何回複到以前的版本。