分布式版本控制系统 version control system
Git跟踪并管理的是修改,而非文件。
版本库 repository
创建一个版本库
$ mkdir learngit$ cd learngit$ pwd/Users/michael/learngit
pwd命令用于显示当前所在的工作目录的绝对路径名称
通过git init命令把这个目录变成可以管理的仓库
$ git initInitialized empty Git repository in /Users/michael/learngit/.git/
用git add添加文件到仓库
$ git add readme.txt
用git commit把文件提交到仓库
$ git commit -m "wrote a readme file"[master (root-commit) eaadf4e] wrote a readme file1 file changed, 2 insertions(+)create mode 100644 readme.txt
-m后面输入的的是这次提交的说明,有利于下次查找
提交命令执行成功后会告诉你,那些文件被改动。
可以add多个文件,然后commit一次性提交。
版本控制
git status命令查看仓库当前的状态
$ git statusOn branch masterChanges 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.txtno changes added to commit (use "git add" and/or "git commit -a")
上面的输出可得readme.txt被修改过,但没提交。
git diff命令就是查看修改内容,可以知道做了什么修改
$ git diff readme.txtdiff --git a/readme.txt b/readme.txtindex 46d49bf..9247db6 100644--- a/readme.txt+++ b/readme.txt@@ -1,2 +1,2 @@-Git is a version control system.+Git is a distributed version control system.Git is free software.
版本回退
git log命令查看历史记录
$ git logcommit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master)Author: Michael Liao <askxuefeng@gmail.com>Date: Fri May 18 21:06:15 2018 +0800append GPLcommit e475afc93c209a690c39c13a46716e8fa000c366Author: Michael Liao <askxuefeng@gmail.com>Date: Fri May 18 21:03:36 2018 +0800add distributedcommit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0Author: Michael Liao <askxuefeng@gmail.com>Date: Fri May 18 20:59:18 2018 +0800wrote a readme file
也可以git log --pretty=online简易输出
$ git log --pretty=oneline1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPLe475afc93c209a690c39c13a46716e8fa000c366 add distributedeaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
说明前一大串的是commit id版本号
使用git reset回退版本
$ git reset --hard HEAD^HEAD is now at e475afc add distributed
HEAD^就是上个版本,HEAD^^就是上上个版本,以此类推。
也可以利用版本号来回退。git reset --hard commit_id
$ git reset --hard 1094aHEAD is now at 83b0afe append GPL
git reflog命令来记录每一次命令
$ git refloge475afc HEAD@{1}: reset: moving to HEAD^1094adb (HEAD -> master) HEAD@{2}: commit: append GPLe475afc HEAD@{3}: commit: add distributedeaadf4e HEAD@{4}: commit (initial): wrote a readme file
工作区和暂存区
工作区(Working Directory)
版本库(Repository)
暂存区
撤销修改
git checkout -- file命令可以丢弃工作区的修改:
$ git checkout -- readme.txt
上面的意思是,把readme.txt文件在工作区的修改全部撤销
- 一种是
readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; - 一种是
readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git reset HEAD <file>命令可以把暂存区的修改撤销掉,重新放回工作区。
$ git reset HEAD readme.txtUnstaged changes after reset:M readme.txt
删除文件
rm命令删除文件,也可以在文件管理器中把没用的文件删了。
$ rm test.txt
删除后也需要git commit,这样文件就从版本库中被删除了
删错了可以用git checkout -- test.txt恢复回来。
远程仓库
git push把本地库的东西推送到远程。


