git


Git简介:        Git是目前世界上最先进的分布式版本控制系统(没有之一)。
这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本   用户   说明                                       日期
1       张三   删除了软件服务条款             5 7/12 10:38
2       张三   增加了License人数限制        7/12 18:09
3       李四    财务部门调整了合同金额     7/13 9:51
4       张三   延长了免费升级周期            7/14 15:17

安装Git
1、Ubuntu安装git
       sudo apt-get install git
2.  设置
        git config --global user.name "Your Name"
        git config --global user.email "email@example.com" 
//usr.name什么的都是GitHub注册时候的,输入命令的时候就不要冒号了

安装Vundle插件管理器  //可以让vim鼠标定位和显示错误信息
        $ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
 
        $ cd ~/

        $ mv .vimrc vimrc.bak

        $ git clone https://github.com/meihao1203/vimrc

        $ cd vimrc/

        $ cp vimrc ~/.vimrc

        $ vim

        :PluginInstall然后等他下载完就可以了
        :BundleUpdate更新插件
        :BundleClean清除不再使用的插件
        :BundleList列出所有插件
        :BundleSearch查找插件
创建版本库
版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

第一步:选择一个合适的地方,创建一个空目录:
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

第二步:通过

git init命令把这个目录变成Git可以管理的仓库










$ git init

Initialized empty Git repository in /Users/michael/learngit/.git/

如果你没有看到

.git目录,那是因为这个目录默认是隐藏的,用

ls -ah命令就可以看见。





第三部:把文件添加到版本库

现在我们编写一个

readme.txt文件,内容如下:


//一定要放到

learngit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件











Git is a version control system.

Git is free software.






用命令

git add告诉Git,把文件添加到仓库:









$ git add readme.txt



用命令

git commit告诉Git,把文件提交到仓库:










$ git commit -m "wrote a readme file"     //冒号里面的是注释

[master (root-commit) cb926e7] wrote a readme file

1 file changed, 2 insertions(+)

create mode 100644 readme.txt



//

-m 
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。













//可以add多个文件,一次提交

$ git add file1.txt

$ git add file2.txt file3.txt

$ git commit -m "add 3 files."






查看库当前状态

我们继续修改readme.txt文件,改成如下内容:









Git is a distributed version control system.

Git is free software.




运行

git status命令看看结果:










$ 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 status命令可以让我们时刻掌握仓库当前的状态,上面的命令告诉我们,readme.txt被修改过了,但还没有准备提交的修改。







git diff这个命令产看修改了什么内容:










$ git diff readme.txt

diff --git a/readme.txt b/readme.txt

index 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.



从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。




修改后提交到库:








$ git add readme.txt





运行

git status看看当前仓库的状态:










$ git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#       modified:   readme.txt

#




//git status告诉我们,将要被提交的修改包括readme.txt





提交:









$ git commit -m "add distributed"

[master ea34578] add distributed

1 file changed, 1 insertion(+), 1 deletion(-)












$ git status

# On branch master

nothing to commit (working directory clean)



//Git告诉我们当前没有需要提交的修改,而且,工作目录是干净(working directory clean)的。












•要随时掌握工作区的状态,使用git status命令。

•如果git status告诉你有文件被修改过,用git diff可以查看修改内容。




版本回退

修改readme.txt文件如下:









Git is a distributed version control system.

Git is free software distributed under the GPL.



然后尝试提交:









$ git add readme.txt

$ git commit -m "append GPL"

[master 3628164] append GPL

1 file changed, 1 insertion(+), 1 deletion(-)





git log命令查看相应文件一共有几个版本提交到库










$ git log

commit 3628164fb26d48395383f8f31179f24e0882e1e0

Author: Michael Liao <askxuefeng@gmail.com>

Date:   Tue Aug 20 15:11:49 2013 +0800




    append GPL




commit ea34578d5496d7dd233c827ed32a8cd576c5ee85

Author: Michael Liao <askxuefeng@gmail.com>

Date:   Tue Aug 20 14:53:12 2013 +0800




    add distributed




commit cb926e7ea50ad11b8f9e909c05226233bf755030

Author: Michael Liao <askxuefeng@gmail.com>

Date:   Mon Aug 19 17:51:55 2013 +0800




    wrote a readme file




//git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是

append GPL,上一次是

add distributed,最早的一次是

wrote a readme file





如果嫌输出信息太多,看得眼花缭乱的,可以试试加上

--pretty=oneline参数:










$ git log --pretty=oneline

3628164fb26d48395383f8f31179f24e0882e1e0    append GPL

ea34578d5496d7dd233c827ed32a8cd576c5ee85    add distributed

cb926e7ea50ad11b8f9e909c05226233bf755030    wrote a readme file



//前面的是版本号




要会退到前面的版本:git reset










$ git reset --hard HEAD^

HEAD is now at ea34578 add distributed




//HEAD表示当前版本,上一个版本HEAD^,上上一个版本HEAD^^,网上100个版本HEAD~100









$ cat readme.txt

Git is a distributed version control system.

Git is free software.






回退玩之后









$ git log

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85

Author: Michael Liao <askxuefeng@gmail.com>

Date:   Tue Aug 20 14:53:12 2013 +0800




    add distributed




commit cb926e7ea50ad11b8f9e909c05226233bf755030

Author: Michael Liao <askxuefeng@gmail.com>

Date:   Mon Aug 19 17:51:55 2013 +0800




    wrote a readme file



最新的那个版本  

append GPL  已经看不到了!


****只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到那个

append GPL

commit id

3628164...,于是就可以指定回到未来的某个版本:










//版本号没必要写全,前几位就可以了,Git会自动去找

$ git reset --hard 3628164

HEAD is now at 3628164 append GPL












$ cat readme.txt

Git is a distributed version control system.

Git is free software distributed under the GPL.







Git的版本回退速度非常快,因为Git在内部有个指向当前版本的

HEAD指针,当你回退版本的时候,Git仅仅是把HEAD从指向

append GPL


git-head


改为指向

add distributed


git-head-move


然后顺便把工作区的文件更新了。所以你让

HEAD指向哪个版本号,你就把当前版本定位在哪。




当你用$ git reset --hard HEAD^回退到

add distributed版本时,再想恢复到

append GPL,就必须找到

append GPLcommit id。Git提供了一个命令

git reflog用来记录你的每一次命令:










$ git reflog

ea34578 HEAD@{0}: reset: moving to HEAD^

3628164 HEAD@{1}: commit: append GPL

ea34578 HEAD@{2}: commit: add distributed

cb926e7 HEAD@{3}: commit (initial): wrote a readme file



第二行显示

append GPLcommit id

3628164,这样上面的命令窗口关闭,不知道前面的版本号也可以查看








工作区和暂存区

就是你在电脑里能看到的目录,比如我的

learngit文件夹就是一个工作区:


版本库:工作区有一个隐藏目录

.git,这个不算工作区,而是Git的版本库。


Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支

master,以及指向

master的一个指针叫

HEAD














git-repo
git-stage
git-stage-after-commit










撤销修改


readme.txt中添加了一行:










$ 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.

Git tracks changes of files.

My stupid boss still prefers SVN.












$ 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 checkout -- file可以丢弃工作区的修改:










$ git checkout -- readme.txt







命令

git checkout -- readme.txt意思就是,把

readme.txt文件在工作区的修改全部撤销,这里有两种情况:


一种是

readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;


一种是

readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。


总之,就是让这个文件回到最近一次

git commit

git add时的状态。


现在,看看

readme.txt的文件内容:











$ 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.

Git tracks changes of files.






删除文件










$ git add test.txt

$ git commit -m "add test.txt"

[master 94cdc44] add test.txt

1 file changed, 1 insertion(+)

create mode 100644 test.txt












$ rm test.txt



//Git知道你删除了文件,因此,工作区和版本库就不一致了,

git status命令会立刻告诉你哪些文件被删除了:











$ git status

# On branch master

# Changes not staged for commit:

#   (use "git add/rm <file>..." to update what will be committed)

#   (use "git checkout -- <file>..." to discard changes in working directory)

#

#       deleted:    test.txt

#

no changes added to commit (use "git add" and/or "git commit -a")




确实要从版本库中删除该文件,那就用命令

git rm删掉,并且

git commit











$ git rm test.txt

rm 'test.txt'

$ git commit -m "remove test.txt"

[master d17efd8] remove test.txt

1 file changed, 1 deletion(-)

delete mode 100644 test.txt




删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:










$ git checkout -- test.txt










原文地址:https://www.cnblogs.com/meihao1203/p/8690039.html