版本管理
2018-01-10 本文已影响13人
吃橘子的冬天
工作区(Working Directory):
就是电脑能看得到的目录,比如刚刚创建的learngit文件夹
版本库(Repository):
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git版本库中存了很多东西,其中最重要的就是叫Stage的暂存区,还有Git为我们创建的第一个分支master,以及指向master的一个指针——HEAD。
前面我们把文件往Git库添加的时候,是分两步执行的:
1. 用git add把文件添加进去,实际上是添加到暂存区;
2. 用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。
g@g-PC MINGW64 /learngit (master)
$ vi readme.txt
g@g-PC MINGW64 /learngit (master)
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
g@g-PC MINGW64 /learngit (master)
$ touch LICENSE
g@g-PC MINGW64 /learngit (master)
$ cat LICENSE
abc
g@g-PC MINGW64 /learngit (master)
$ 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: # 没有被添加过 (Untracked : 无路径的;无脚印的,无足迹的)
(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") # 没有更改且已被提交的文件
g@g-PC MINGW64 /learngit (master)
$ git add readme.txt
g@g-PC MINGW64 /learngit (master)
$ git add LICENSE
warning: LF will be replaced by CRLF in LICENSE.
The file will have its original line endings in your working directory.
g@g-PC MINGW64 /learngit (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: LICENSE
new file: biubiu
modified: readme.txt
g@g-PC MINGW64 /learngit (master)
$ git commit -m "undestand how stage work" # Git的提交,是一并全部提交,而不能单个提交
[master 50b7574] undestand how stage work
3 files changed, 4 insertions(+), 1 deletion(-)
create mode 100644 LICENSE
create mode 100644 biubiu
g@g-PC MINGW64 /learngit (master)
$ git status # 此事的暂存区已经干干净净 working tree clean
On branch master
nothing to commit, working tree clean
git diff #是工作区(work dict)和暂存区(stage)的比较
git diff --cached #是暂存区(stage)和分支(master)的比较
在Git中,用HEAD表示当前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD,上上一个版本就是HEAD,当然往上100个版本写100个比较容易数不过来,所以写成HEAD~100
g@g-PC MINGW64 /learngit (master)
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
g@g-PC MINGW64 /learngit (master)
$ git reset --hard HEAD^ #回滚到上一个版本
HEAD is now at c3528d1 append GPL
g@g-PC MINGW64 /learngit (master)
$ cat readme.txt
Git is a version control system.
Git is free software.
Git is a distributed version control system.
Git is free software distributed under the GPL.
g@g-PC MINGW64 /learngit (master)
$ git reset --hard 932f121 #回滚到某一版本(版本号不用写全,Git会自动寻找)
HEAD is now at 932f121 del 2 rows
g@g-PC MINGW64 /learngit (master)
$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.
查看命令历史,以便回过了之后到未来版本
g@g-PC MINGW64 /learngit (master)
$ git reflog
932f121 (HEAD -> master) HEAD@{0}: reset: moving to 932f121
c3528d1 HEAD@{1}: reset: moving to HEAD^
932f121 (HEAD -> master) HEAD@{2}: commit: del 2 rows
c3528d1 HEAD@{3}: commit: append GPL
311bbf5 HEAD@{4}: commit (initial): wrote a readme file