基本概念
工做區(Working Directory): 就是你在電腦裏能看到的目錄
版本庫(Repository): 工做區有一個隱藏目錄.git,這個不算工做區,而是Git的版本庫。
暫存區 : Git 的版本庫裏存了不少東西,其中最重要的就是稱爲 stage(index)的暫存區html
git config --global user.email "jmilkfan@example.com" git config --global user.name "jmilkfan"
[user] # User info | email = jmilkfan@example.com | name = jmilkfan [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true editor = vim # 默認編輯器
針對單個項目的配置: vim projectName/.git/configgit
| repositoryformatversion = 0 | filemode = true | bare = false [remote "origin"] | url = http://fanguiju@192.168.1.1:8080/openstack/projectname | fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] | remote = origin | merge = refs/heads/master [remote "gerrit"] | url = ssh://fanguiju@192.168.1.1:8080/openstack/projectname.git | fetch = +refs/heads/*:refs/remotes/gerrit/*安裝
sudo apt-get install git # OR yum install -y git本地版本庫
版本庫又名倉庫(repository),能夠簡單理解爲一個目錄,這個目錄裏面的全部文件均可以被Git管理起來,每一個文件的修改、刪除,Git都能跟蹤,以便任什麼時候刻均可以追蹤歷史,或者在未來某個時刻能夠「還原」。sql
mkdir jmilkfanDir
cd jmilkfanDir git init
生成 .git 目錄, 這個目錄纔是本質上的 Git 倉庫, 是 Git 來跟蹤管理版本庫的根本。vim
touch README.md git status # 查看當前工做區的狀態, 即工做區中有那些文件是和 Git 倉庫中記錄的內容不同的 # Or git status -s # 簡約的狀態查看方式 git add README.md # 添加單個文件 # Or git add . # 添加全部文件 git diff # 查看當前工做區中的文件內容與已往 Git 倉庫中記錄的內容有那些不一樣, 強烈建議在每一次執行 commit 以前都 diff 一次來確保能完成指望的提交 git commit -m "註釋, 便於記錄此次提交的內容主題" # -m 只能提交單行註釋, 並不規範 # Or git commit # 進入 Vim 編輯模式, 能夠編輯規範的註釋
status 指令: 可讓咱們時刻掌握 Git 倉庫當前的狀態
add 指令: 本質上是將工做區中的文件記錄到 Git 倉庫的暫存區中, 並無真正寫入到 Git 倉庫
diff 指令: 看當前工做區中的文件內容與已往 Git 倉庫中記錄的內容有那些不一樣
commit 指令: 將暫存區的內容提交到 Git 倉庫中記錄. 因此, add 能夠指定多個文件, 最終由 commit 一次性寫入到 Git 倉庫.ruby
git rm README.md git commit -m "remove README.md"
刪除文件也會致使工做區和 Git 版本庫的不一致, 因此也須要提交操做, 來讓 Git 版本庫來記錄這一此的改變.
NOTE: 刪錯了, 也能夠很輕鬆地把誤刪的文件恢復到最新版本bash
git checkout -- README.md
Git 倉庫的版本被稱爲 commit, 一旦你把文件改亂了,或者誤刪了文件,還能夠回退最近的一個 commit.
經過 log 來查看 commit ID:ssh
git log # 查看完整的 log 信息 # Or git log --pretty=oneline # # 查看簡潔的 log 信息
回退的步驟:編輯器
首先,Git必須知道當前版本是哪一個版本,在Git中,用HEAD表示當前版本, 上一個版本就是HEAD^,上上一個版本就是HEAD^^,固然往上100個版本寫100個^比較容易數不過來,因此寫成HEAD~100。ide
git reset
指令. EG:fetch
git reset --hard HEAD^ # Or $ git reset --hard [commit ID]
NOTE: 回退 「回退」 的方法
只要上面的命令行窗口尚未被關掉,你就能夠順着往上找到那個但願回退 「回退」 的commit id
那麼忘記了 commit 怎麼辦 ? 還可使用 git reflog 指令
git reflog
若是每次在工做區中對文件的修改,不 add 到暫存區,那就不會被提交到 commit 中.
因此當咱們 git add 了一個文件後, 發現還須要繼續對文件進行修改時, 先彆着急提交第一次修改,再次 git add 第二次修改以後 git commit,就至關於把兩次修改合併後一塊提交了.
第一次修改 ⇒ git add ⇒ 第二次修改 ⇒ git add ⇒ git commit
git checkout -- filename
手動的把 filename 文件中的修改撤銷掉. git checkout -- filename
命令中的 – 很重要,沒有 –,就變成了「切換到另外一個分支」.把 filename 文件在工做區的修改所有撤銷,這裏有兩種狀況:
1. filename 文件自修改後尚未被 add 到暫存區,如今執行 git checkout -- filename
就可以撤銷修改, 從而讓文件回到和版本庫中所記錄的同樣;
2. filename 已經 add 到了暫存區後,又對文件做了修改,如今執行撤銷修改的話, filename 文件就回到 add 到暫存區後的狀態(即仍會保留暫存區中的內容)。
NOTE: 針對第二種狀況, 咱們還能夠在 commit 以前, 用命令 git reset HEAD filename
把暫存區的內容進行撤銷,讓 filename 文件從新放回工做區的狀態. git reset命令既能夠回退版本,也能夠把暫存區的修改回退到工做區。
git checkout -- filename
。 git reset HEAD file
,就回到了場景1,再git checkout -- filename
. git reset --hard [commit ID]