《Git 文件操作和歷史回退》要點:
本文介紹了Git 文件操作和歷史回退,希望對您有用。如果有疑問,可以聯系我們。
創立新文件夾:mkdir learngit
進入:cd learngit
ls
發現沒有任何東西:git init
將這個文件夾設置為git文件夾.目錄下面會出現.git 的暗藏文件
當移入/創建新的文件和文件夾時,必要git add file
然后,git commit -m 闡明
將文件提交到當前分支.執行命令前后的區別,可以通過git status
來查看.
當修改文件內容的時候,調用git status
會發現modified:,闡明沒有提交到當前分支.
此時,可以git diff 改動的文件名
,來查看文件哪里進行了改動.
當然,最后還是必要先git add file
,再git commit -m 說明
一下.
查看git status
的成果的最后應該是:working directory clean
git log
:可以查看最近到最遠的提交日志.如果嫌輸出信息太多,看得眼花繚亂的,可以嘗嘗加上--pretty=oneline參數,使用git log --pretty=oneline
需要友情提示的是,你看到的一大串類似3628164...882e1e0的是commit id(版本號),和SVN不一樣,Git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示,而且你看到的commit id和我的肯定不一樣,以你本身的為準.為什么commit id需要用這么一大串數字表示呢?因為Git是分布式的版本控制系統,后面我們還要研究多人在同一個版本庫里工作,如果大家都用1,2,3……作為版本號,那肯定就沖突了.
git reset --hard 一段commit_id的縮寫
:重回對應的版本,不必要全部的commit_id,只要前幾位可以區分就行.嫌麻煩的話,可以git reset --hard HEAD~num
,例如 git reset --hard HEAD~100
回退到前100個版本.
git checkout -- file
:如果只是想在沒有commit
提交之前撤銷修改,這條命名會讓文件撤銷修改.
注意,必需有 -- ,否則就是切換分支了.
如果手動刪除了文件/敕令行rm file
刪除了文件
git rm file
,然后再git commit -m "..."
提交到版本庫git checkout -- file
恢復即可.Git和其他版本控制系統如SVN的一個不同之處便是有暫存區的概念.
先來看名詞解釋.
就是你在電腦里能看到的目錄,好比我的learngit
文件夾就是一個工作區:
工作區有一個暗藏目錄.git
,這個不算工作區,而是Git的版本庫.
Git的版本庫里存了很多東西,其中最重要的便是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master
,以及指向master
的一個指針叫HEAD
.
分支和HEAD
的觀點我們以后再講.
前面講了我們把文件往Git版本庫里添加的時刻,是分兩步執行的:
第一步是用git add
把文件添加進去,實際上便是把文件修改添加到暫存區;
第二步是用git commit
提交更改,實際上便是把暫存區的所有內容提交到當前分支.
因為我們創建Git版本庫時,Git自動為我們創建了唯一一個master
分支,所以,現在,git commit
便是往master
分支上提交更改.
你可以簡單理解為,必要提交的文件修改通通放到暫存區,然后,一次性提交暫存區的所有修改.
俗話說,實踐出真知.現在,我們再練習一遍,先對readme.txt
做個修改,好比加上一行內容:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
然后,在事情區新增一個LICENSE
文本文件(內容隨便寫).
先用git status
查看一下狀態:
$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# LICENSE
no changes added to commit (use "git add" and/or "git commit -a")
Git異常清楚地告訴我們,readme.txt
被修改了,而LICENSE
還從來沒有被添加過,所以它的狀態是Untracked
.
現在,使用兩次敕令git add
,把readme.txt
和LICENSE
都添加后,用git status
再查看一下:
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: LICENSE
# modified: readme.txt
#
現在,暫存區的狀態就釀成這樣了:
所以,git add
命令實際上便是把要提交的所有修改放到暫存區(Stage),然后,執行git commit
就可以一次性把暫存區的所有修改提交到分支.
$ git commit -m "understand how stage works"
[master 27c9860] understand how stage works
2 files changed, 675 insertions(+)
create mode 100644 LICENSE
一旦提交后,如果你又沒有對工作區做任何修改,那么工作區便是“干凈”的:
$ git status
# On branch master
nothing to commit (working directory clean)
現在版本庫釀成了這樣,暫存區就沒有任何內容了:
暫存區是Git異常重要的概念,弄明白了暫存區,就弄明白了Git的很多操作到底干了什么.
沒弄明確暫存區是怎么回事的童鞋,請向上滾動頁面,再看一次.
更多 Git 教程系列文章:?
GitHub 使用教程圖文詳解? http://www.linuxidc.com/Linux/2014-09/106230.htm?
Git使用圖文具體教程? http://www.linuxidc.com/Linux/2016-11/136781.htm
Ubuntu Git安裝與使用 http://www.linuxidc.com/Linux/2016-11/136769.htm
Git 標簽治理詳解 http://www.linuxidc.com/Linux/2014-09/106231.htm?
Git 分支治理詳解 http://www.linuxidc.com/Linux/2014-09/106232.htm?
Git 長途倉庫詳解 http://www.linuxidc.com/Linux/2014-09/106233.htm?
Git 當地倉庫(Repository)詳解 http://www.linuxidc.com/Linux/2014-09/106234.htm?
Git 服務器搭建與客戶端安裝? http://www.linuxidc.com/Linux/2014-05/101830.htm?
Git 概述 http://www.linuxidc.com/Linux/2014-05/101829.htm?
分享適用的GitHub 使用教程 http://www.linuxidc.com/Linux/2014-04/100556.htm?
Git從入門到學會 http://www.linuxidc.com/Linux/2016-10/135872.htm
Git根本操作詳解 http://www.linuxidc.com/Linux/2016-10/135691.htm
Git部署與常用根本命令詳解? ?http://www.linuxidc.com/Linux/2017-06/144961.htm
散布式版本控制系統 Git 詳細教程? http://www.linuxidc.com/Linux/2017-05/143747.htm
Git 的詳細先容:請點這里
Git 的下載地址:請點這里
本文永遠更新鏈接地址:http://www.linuxidc.com/Linux/2017-06/145144.htm
更多LINUX教程,盡在維易PHP學院專欄。歡迎交流《Git 文件操作和歷史回退》!