Git

3 篇文章 0 订阅

Git是什么?

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

1Git简介

Git是分布式版本控制系统,集中式和分布式版本控制系统有什么区别呢?

集中式版本控制系统

 

分布式版本控制系统

 

 

2、Git安装

系统: centos

检查linux系统是不是安装了git

[root@cqs /]# git

The program 'git' is currently not installed. You can install it by typing.#说明没安装git

如果你碰巧用DebianUbuntu Linux,通过一条sudo apt-get install git就可以直接完成Git的安装,非常简单。老一点的DebianUbuntu Linux,要把命令改为sudo apt-get install git-core,centos所用的指令时yum install git -y

[root@cqs /]# yum install git -y

[root@cqs /]# git version

git version 1.7.1

[root@cqs /]# git

usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]

           [-p|--paginate|--no-pager] [--no-replace-objects]

           [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]

           [--help] COMMAND [ARGS]

See 'git help COMMAND' for more information on a specific command.

安装完成后,还需要最后一步设置,在命令行输入:

[root@cqs /] git config --global user.name "Your Name"

[root@cqs /]git config --global user.email "email@example.com"

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

 

3、创建版本库

apache所在的htdocs文件夹下的项目进行管理

[root@cqs /]# cd /usr/local/httpd-2.4.18/htdocs/

[root@cqs htdocs]# mkdir learngit

[root@cqs htdocs]# cd learngit/

[root@cqs learngit]# pwd

/usr/local/httpd-2.4.18/htdocs/learngit

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

[root@cqs learngit]# git init

Initialized empty Git repository in /usr/local/httpd-2.4.18/htdocs/learngit/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

由于是隐藏目录,所以要使用ls -ah命令才看的到对应的隐藏目录。

[root@cqs learngit]# ls -ah

.  ..  .git

[root@cqs learngit]# cd .git/

[root@cqs .git]# ls

branches  config  description  HEAD  hooks  info  objects  refs

[root@cqs .git]# cat config

[core]

        repositoryformatversion = 0

        filemode = true

        bare = false

        logallrefupdates = true

 

4、把文件添加到版本库

新建一个文件

[root@cqs learngit]# vim readme.txt

 

Git is a version control system.

Git is free software.

wq进行保存

[root@cqs learngit]# cat readme.txt

Git is a version control system.

Git is free software.

readme.txt文件上传到git仓库,git add命令把文件添加到仓库,git commit命令提交到仓库,可加上-m参数说明提交内容

[root@cqs learngit]# git add readme.txt

[root@cqs learngit]# git commit -m "wrote a readme file"

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

 Committer: root <root@cqs.(none)>

Your name and email address were configured automatically based

on your username and hostname.

1 files changed, 2 insertions(+), 0 deletions(-)

create mode 100644 readme.txt

为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件

 

5、时光穿梭机

1git statusgit diff指令

readme.txt内容进行修改

[root@cqs learngit]# vim readme.txt

 

Git is a version control system.

Git is free software.

Please try again123.

运行git status命令看看结果

[root@cqs learngit]# git status

# On branch master

# Changed but not updated:

#   (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顾名思义就是查看difference,显示的格式正是Unix通用的diff格式,可以从上面的命令输出看到,我们在第一行添加了一个“distributed”单词。

[root@cqs learngit]# git diff readme.txt

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

index 5411f74..697eba6 100644

--- a/readme.txt

+++ b/readme.txt

@@ -1,3 +1,3 @@

 Git is a version control system.

 Git is free software.

-Please try again.

+Please try again123.

我们看到了readme.txt修改的内容,接下来上传文件

[root@cqs learngit]# git add readme.txt

[root@cqs learngit]# git status

# On branch master

# Changes to be committed:

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

#

#       modified:   readme.txt

#

提交文件到仓库,

[root@cqs learngit]# git commit -m "add distributed"

[master c55f398] add distributed

 1 files changed, 1 insertions(+), 1 deletions(-)

[root@cqs learngit]# git status

# On branch master

nothing to commit (working directory clean)

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

 

2git log指令、git reset指令和git reflog指令

git log命令显示从最近到最远的提交日志,我们可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file。 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

[root@cqs learngit]# git log

commit c55f398c0f8e8afcbdf1140182f81682161d3887

Author: Your Name <you@example.com>

Date:   Wed Nov 16 07:11:22 2016 +0800

 

    add distributed

 

commit d9c83081fccf7762cf4b2ad46ace80ef22762ed7

Author: Your Name <you@example.com>

Date:   Wed Nov 16 06:54:16 2016 +0800

 

    rewrite readme file

 

commit 3f1888785bae054c3eaaf758e2c573c175572360

Author: root <root@cqs.(none)>

Date:   Wed Nov 16 06:45:24 2016 +0800

 

    wrote a readme file

[root@cqs learngit]# git log --pretty=oneline

c55f398c0f8e8afcbdf1140182f81682161d3887 add distributed

d9c83081fccf7762cf4b2ad46ace80ef22762ed7 rewrite readme file

3f1888785bae054c3eaaf758e2c573c175572360 wrote a readme file

Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100^比较容易数不过来,所以写成HEAD~100

eg.回退到上一个版本

[root@cqs learngit]# git reset --hard HEAD^

HEAD is now at d9c8308 rewrite readme file

[root@cqs learngit]# git log --pretty=oneline

d9c83081fccf7762cf4b2ad46ace80ef22762ed7 rewrite readme file

3f1888785bae054c3eaaf758e2c573c175572360 wrote a readme file

查看回退的log档,最前面表示commit id,用commit id我们可以回退到指定的版本

[root@cqs learngit]# git reflog

d9c8308 HEAD@{0}: HEAD^: updating HEAD

c55f398 HEAD@{1}: commit: add distributed

d9c8308 HEAD@{2}: commit: rewrite readme file

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

我们现在想回退到add distributed版本的话,使用的指令是git reset --hard
[root@cqs learngit]#  git reset --hard c55f398

HEAD is now at c55f398 add distributed

[root@cqs learngit]# cat readme.txt           

Git is a version control system.

Git is free software.

Please try again123.

[root@cqs learngit]# git reflog

c55f398 HEAD@{0}: c55f398: updating HEAD

d9c8308 HEAD@{1}: HEAD^: updating HEAD

c55f398 HEAD@{2}: commit: add distributed

d9c8308 HEAD@{3}: commit: rewrite readme file

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

接下来用git diff HEAD -- readme.txt命令可以查看工作区和版本库里面最新版本的区别,我们对readme.txt进行修改。

[root@cqs learngit]# git diff HEAD -- readme.txt

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

index 697eba6..6eeca5d 100644

--- a/readme.txt

+++ b/readme.txt

@@ -1,3 +1,4 @@

+insert into a(hh) values('ddd');

 Git is a version control system.

 Git is free software.

 Please try again123.

 

3git checkout指令和git rm指令

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销,这里有两种情况:

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

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

总之,就是让这个文件回到最近一次git commitgit add时的状态。

[root@cqs learngit]# git checkout -- readme.txt

[root@cqs learngit]# cat readme.txt

Git is a version control system.

Git is free software.

Please try again123.

Git中,删除也是一个修改操作,我们实战一下,先添加一个新文件test.txtGit并且提交

[root@cqs learngit]# vim test.txt

sss

wq保存退出,上传,提交该文件

[root@cqs learngit]# git add test.txt

[root@cqs learngit]# git commit -m "add test.txt"

[master 1668b84] add test.txt

 1 files changed, 1 insertions(+), 0 deletions(-)

 create mode 100644 test.txt

[root@cqs learngit]# git log --pretty=oneline

1668b84b932dc53ec347c86fa9befac91b7dfef7 add test.txt

c55f398c0f8e8afcbdf1140182f81682161d3887 add distributed

d9c83081fccf7762cf4b2ad46ace80ef22762ed7 rewrite readme file

3f1888785bae054c3eaaf758e2c573c175572360 wrote a readme file

接下来使用git rm进行该文件的删除

[root@cqs learngit]# git rm test.txt

rm 'test.txt'

[root@cqs learngit]# git commit -m "remove test.txt"

[master 2e0ef21] remove test.txt

 1 files changed, 0 insertions(+), 1 deletions(-)

 delete mode 100644 test.txt

git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”


Git基本常用命令如下:

   mkdir:         XX (创建一个空目录 XX指目录名)

   pwd:          显示当前目录的路径。

   git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

   git add XX       把xx文件添加到暂存区去。

   git commit –m “XX”  提交文件 –m 后面的是注释。

   git status        查看仓库状态

   git diff  XX      查看XX文件修改了那些内容

   git log          查看历史记录

   git reset  –hard HEAD^ 或者 git reset  –hard HEAD~ 回退到上一个版本(如果想回退到100个版本,使用git reset –hard HEAD~100 )

   cat XX         查看XX文件内容

   git reflog       查看历史记录的版本号id

   git checkout — XX  把XX文件在工作区的修改全部撤销。

   git rm XX          删除XX文件

   git remote add origin https://github.com/tugenhua0707/testgit 关联一个远程库

   git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库

   git clone https://github.com/tugenhua0707/testgit  从远程库中克隆

   git checkout –b dev  创建dev分支 并切换到dev分支上

   git branch  查看当前所有的分支

   git checkout master 切换回master分支

   git merge dev    在当前的分支上合并dev分支

   git branch –d dev 删除dev分支

   git branch name  创建分支

   git stash 把当前的工作隐藏起来 等以后恢复现场后继续工作

   git stash list 查看所有被隐藏的文件列表

   git stash apply 恢复被隐藏的文件,但是内容不删除

   git stash drop 删除文件

   git stash pop 恢复文件的同时 也删除文件

   git remote 查看远程库的信息

   git remote –v 查看远程库的详细信息

   git push origin master  Git会把master分支推送到远程库对应的远程分支上


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值