创建版本库
用git init进行初始化git仓库
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
把文件添加到仓库里面
git add 文件名
总共分两步,第一个用add命令,第二步用commit进行提交
- 用命令git add告诉Git,把文件添加到仓库
git add readme.txt
- 用命令git commit告诉Git,把文件提交到仓库
git commit -m 'firstGitFile'
[master (root-commit) 7baadbe] firstGitFile
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
-m 是提交的描述信息
文件状态的查看
使用git status 可以 看到此时文件是否被修改、是否已经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")
查看修改的内容
使用git diff 文件名 查看具体的文件被修改的内容
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" 是刚刚添加 的东西
下面把修改的内容提交到仓库里面
~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 进行日志的查看
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
这个参数进行格式化显示
gitProject $ git log --pretty=oneline
2bdd40c4b102c1c0d66fb76e7c4223561909b917 all
7baadbe11855286e7c5f0b8558a66087c7be2008 firstGitFile
第一列是版本号,第二列是提交时加的说明
版本的回退
在Git中,用HEAD表示当前版本,也就是最新的提交2bdd40....909b917
(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
在进行版本回退时可以使用git reset
命令
gitProject $ git reset --hard HEAD^
HEAD is now at 7baadbe firstGitFile
gitProject $ cat readme.txt
firsst
可以看出已经回退到上个版本了
假如现在又不想回退了,想恢复到最新的那个版本
gitProject $ git log
commit 7baadbe11855286e7c5f0b8558a66087c7be2008
Author: ShenQi <hapic@163.com>
Date: Tue Aug 22 21:36:00 2017 +0800
firstGitFile
使用log命令时看到新提交的那个日志已经没了,此时可以通过git reflog
命令来看进行还原的日志操作
gitProject $ git reflog
7baadbe HEAD@{0}: reset: moving to HEAD^
2bdd40c HEAD@{1}: commit: all
7baadbe HEAD@{2}: commit (initial): firstGitFile
可以看到从提交到还原的所有日志,现在就可以 通过第一列的版本号再次还原到最初的那个版本了
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
内容又回来了
git log命令加-g
参数 和 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
以上说的是对已经提交到本地仓库的文件的回退,本地仓库我们有缓存区和分支两部分,git add就是把本地修改的内存添加到缓存区,而git commi是把缓存区的修改提交到对应的分支上来。如何从缓存区撤销修改呢
分支的创建
git branch dev --创建分支(dev是创建的分支名称)
git checkout dev --切换分支(dev是创建的分支名称)
可以使用组合命令创建并切换分支
git checkout -b dev (dev是创建的分支名称)
查看当前的分支
git branch
* dev
master (master是系统默认创建的主干)
合并某分支到当前分支
git merge dev (dev是分支名称)
删除分支
git branch -d dev (dev是分支名称)