版本管理

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
上一篇 下一篇

猜你喜欢

热点阅读