創(chuàng)建版本庫(kù)
用git init進(jìn)行初始化git倉(cāng)庫(kù)
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
把文件添加到倉(cāng)庫(kù)里面
git add 文件名
總共分兩步,第一個(gè)用add命令,第二步用commit進(jìn)行提交
- 用命令git add告訴Git,把文件添加到倉(cāng)庫(kù)
git add readme.txt
- 用命令git commit告訴Git,把文件提交到倉(cāng)庫(kù)
git commit -m 'firstGitFile'
[master (root-commit) 7baadbe] firstGitFile
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
-m 是提交的描述信息
文件狀態(tài)的查看
使用git status 可以 看到此時(shí)文件是否被修改、是否已經(jīng)commit等
$ echo 'aa' >> readme.txt
$ 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
no changes added to commit (use "git add" and/or "git commit -a")
查看修改的內(nèi)容
使用git diff 文件名 查看具體的文件被修改的內(nèi)容
git diff readme.txt
diff --git a/readme.txt b/readme.txt
index ad9176c..3ae99eb 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
firsst
+aa
可以看到 "aa" 是剛剛添加 的東西
下面把修改的內(nèi)容提交到倉(cāng)庫(kù)里面
~ShenQi$ git add readme.txt
~ShenQi$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
~ShenQi$ git commit -m 'all'
[master 2bdd40c] all
1 file changed, 1 insertion(+)
~ShenQi$ git status
On branch master
nothing to commit, working tree clean
SQMacBook-Pro:gitProject ShenQi$
查看日志
使用 git log 進(jìn)行日志的查看
ShenQi$ git log
commit 2bdd40c4b102c1c0d66fb76e7c4223561909b917
Author: ShenQi <hapic@163.com>
Date: Tue Aug 22 21:58:46 2017 +0800
all
commit 7baadbe11855286e7c5f0b8558a66087c7be2008
Author: ShenQi <hapic@163.com>
Date: Tue Aug 22 21:36:00 2017 +0800
firstGitFile
如果覺得這樣的格式太亂的話,可以 使用--pretty=oneline 這個(gè)參數(shù)進(jìn)行格式化顯示
gitProject $ git log --pretty=oneline
2bdd40c4b102c1c0d66fb76e7c4223561909b917 all
7baadbe11855286e7c5f0b8558a66087c7be2008 firstGitFile
第一列是版本號(hào),第二列是提交時(shí)加的說(shuō)明
版本的回退
在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交2bdd40....909b917(注意我的提交ID和你的肯定不一樣),上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^,當(dāng)然往上100個(gè)版本寫100個(gè)^比較容易數(shù)不過(guò)來(lái),所以寫成HEAD~100。
在進(jìn)行版本回退時(shí)可以使用git reset命令
gitProject $ git reset --hard HEAD^
HEAD is now at 7baadbe firstGitFile
gitProject $ cat readme.txt
firsst
可以看出已經(jīng)回退到上個(gè)版本了
假如現(xiàn)在又不想回退了,想恢復(fù)到最新的那個(gè)版本
gitProject $ git log
commit 7baadbe11855286e7c5f0b8558a66087c7be2008
Author: ShenQi <hapic@163.com>
Date: Tue Aug 22 21:36:00 2017 +0800
firstGitFile
使用log命令時(shí)看到新提交的那個(gè)日志已經(jīng)沒了,此時(shí)可以通過(guò)git reflog命令來(lái)看進(jìn)行還原的日志操作
gitProject $ git reflog
7baadbe HEAD@{0}: reset: moving to HEAD^
2bdd40c HEAD@{1}: commit: all
7baadbe HEAD@{2}: commit (initial): firstGitFile
可以看到從提交到還原的所有日志,現(xiàn)在就可以 通過(guò)第一列的版本號(hào)再次還原到最初的那個(gè)版本了
gitProject $ git reset -hard 2bdd40c
error: did you mean `--hard` (with two dashes ?)
gitProject $ git reset --hard 2bdd40c
HEAD is now at 2bdd40c all
gitProject $ cat readme.txt
firsst
aa
內(nèi)容又回來(lái)了
git log命令加-g參數(shù) 和 git reflog的功能 是一樣的
gitProject $ git log -g --pretty=oneline
2bdd40c4b102c1c0d66fb76e7c4223561909b917 HEAD@{0}: reset: moving to 2bdd40c
7baadbe11855286e7c5f0b8558a66087c7be2008 HEAD@{1}: reset: moving to 7baadbe
7baadbe11855286e7c5f0b8558a66087c7be2008 HEAD@{2}: reset: moving to HEAD^
2bdd40c4b102c1c0d66fb76e7c4223561909b917 HEAD@{3}: commit: all
7baadbe11855286e7c5f0b8558a66087c7be2008 HEAD@{4}: commit (initial): firstGitFile
gitProject $ git reflog
2bdd40c HEAD@{0}: reset: moving to 2bdd40c
7baadbe HEAD@{1}: reset: moving to 7baadbe
7baadbe HEAD@{2}: reset: moving to HEAD^
2bdd40c HEAD@{3}: commit: all
7baadbe HEAD@{4}: commit (initial): firstGitFile
以上說(shuō)的是對(duì)已經(jīng)提交到本地倉(cāng)庫(kù)的文件的回退,本地倉(cāng)庫(kù)我們有緩存區(qū)和分支兩部分,git add就是把本地修改的內(nèi)存添加到緩存區(qū),而git commi是把緩存區(qū)的修改提交到對(duì)應(yīng)的分支上來(lái)。如何從緩存區(qū)撤銷修改呢
分支的創(chuàng)建
git branch dev --創(chuàng)建分支(dev是創(chuàng)建的分支名稱)
git checkout dev --切換分支(dev是創(chuàng)建的分支名稱)
可以使用組合命令創(chuàng)建并切換分支
git checkout -b dev (dev是創(chuàng)建的分支名稱)
查看當(dāng)前的分支
git branch
* dev
master (master是系統(tǒng)默認(rèn)創(chuàng)建的主干)
合并某分支到當(dāng)前分支
git merge dev (dev是分支名稱)
刪除分支
git branch -d dev (dev是分支名稱)