git学习一

在以前的的时候是使用svn,以前也学习过git,但是不系统,现在需要,所以,也学习以下git

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
现如今,大部分的都是在使用git与svn,现在我们谈一下他们之间的区别:
很明显:
1、GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统,git是分布式。svn是集中式的;
2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里,而且,GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。

现在我们正式学习git

git 的入门
安装 git ,个人使用 是 centos7,所以,下面的操作都居于centos7 ,直接复制安装就行

$ yum install curl-devel expat-devel gettext-devel \
  openssl-devel zlib-devel

$ yum -y install git-core

$ git --version
git version 1.8.1

使用 git config --global user.name =‘xxxx’, git config --global user.email=‘xxxx’, 我一般都是github上的用户名和注册的邮箱作为这个git的标识

 git config --global user.name ='xxxx',
 git config --global user.email='xxxx'

使用 git config --list / git config -l 查看配置信息

git config --list

配置信息的修改

 vim ~/.gitconfig

差异分析工具
还有一个比较常用的是,在解决合并冲突时使用哪种差异分析工具。

$ git config --global merge.tool vimdiff

Git 工作区、暂存区和版本库

我们先来理解下Git 工作区、暂存区和版本库概念

工作区:就是你在电脑里能看到的目录。
git
暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

git 创建 仓库

[root@iZwz9ezwhlhq4ianq3t1elZ home]# mkdir git
[root@iZwz9ezwhlhq4ianq3t1elZ home]# cd git
[root@iZwz9ezwhlhq4ianq3t1elZ git]# git init
[root@iZwz9ezwhlhq4ianq3t1elZ git]# ll -a
total 12
drwxr-xr-x  3 root root 4096 Jan  7 12:43 .
drwxr-xr-x. 6 root root 4096 Jan  7 12:40 ..
drwxr-xr-x  7 root root 4096 Jan  7 12:43 .git

初始化后,会在 git目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

如果当前目录下有几个文件想要纳入版本控制,需要先用 git add 命令告诉 Git 开始对这些文件进行跟踪,然后提交:

[root@iZwz9ezwhlhq4ianq3t1elZ git]# touch index.php
[root@iZwz9ezwhlhq4ianq3t1elZ git]# vim index.php
[root@iZwz9ezwhlhq4ianq3t1elZ git]# vim admin.php

添加两个文件在本地工作目录,然后使用git status 查看状态

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       index.php
nothing added to commit but untracked files present (use "git add" to track)
[root@iZwz9ezwhlhq4ianq3t1elZ git]# vim admin.php
[root@iZwz9ezwhlhq4ianq3t1elZ git]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       admin.php
#       index.php
nothing added to commit but untracked files present (use "git add" to track)

上面显示有两个文件没有被跟踪,而且git也有提示我们如何操作

Untracked files:
    #   (use "git add <file>..." to include in what will be committed)

我们使用 git add * 将所有文件一起提交,提交之后,我们使用 git status 查看一下
[root@iZwz9ezwhlhq4ianq3t1elZ git]# git status

# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#       new file:   admin.php
#       new file:   index.php
上面有提示,已经add 上去,使用 git rm file 删除缓存区的文件 ,本地文件使用  rm -rf *将所有文件 删除,但是慎用

git add 提交到缓存区之后,我们使用 git commit -m ‘first commit’ 将所有文件提交到git 仓库中

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git commit -m 'first commit'
[master (root-commit) 5645a14] first commit
 2 files changed, 9 insertions(+)
 create mode 100644 admin.php
 create mode 100644 index.php
[root@iZwz9ezwhlhq4ianq3t1elZ git]# git status
# On branch master
nothing to commit, working directory clean

现在我们修改一下文件

[root@iZwz9ezwhlhq4ianq3t1elZ git]# vim index.php
[root@iZwz9ezwhlhq4ianq3t1elZ git]# 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:   index.php
#
no changes added to commit (use "git add" and/or "git commit -a")

然后我们使用 git add index.php 再提交yixia

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git add .
[root@iZwz9ezwhlhq4ianq3t1elZ git]# git status

    # On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   index.php
#
[root@iZwz9ezwhlhq4ianq3t1elZ git]#  git commint -m 'update'
git: 'commint' is not a git command. See 'git --help'.

Did you mean this?
        commit
[root@iZwz9ezwhlhq4ianq3t1elZ git]#  git commit -m 'update'
[master 4f0f1c4] update
 1 file changed, 4 insertions(+)
[root@iZwz9ezwhlhq4ianq3t1elZ git]# git status
# On branch master
nothing to commit, working directory clean

我们使用 git log 查看一下我们修改的历史

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git log
commit 4f0f1c4f9d6181a7279d2ea0f7495f575bfcb592
Author: tzfphp 16620***40@163.com
Date: Mon Jan 7 13:09:00 2019 +0800

update

commit 5645a1408a43238fdc9a453de55131323cf4fcaa
Author: tzfphp 16620****40@163.com
Date: Mon Jan 7 12:57:35 2019 +0800

first commit

使用版本回退操作 把当前的版本回退到上一个版本, 可以使用如下2种命令,第一种是:git reset --hard HEAD^ 那么如果要回退到上上个版本只需把HEAD^ 改成 HEAD^^ 以此类推。那如果要回退到前100个版本的话,使用上面的方法肯定不方便,我们可以使用下面的简便命令操作:git reset --hard HEAD~100 即可。未回退之前的readme.txt内容如下:
  使用 cat index.php 查看

  [root@iZwz9ezwhlhq4ianq3t1elZ git]# cat index.php
<? php

echo phpinfo();
foreach ($arr as $k=>$v){
 print_r($v`);
}
现在为上面的内容

我们使用git reset --hard HEAD

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git reset --hard HEAD~1
HEAD is now at 5645a14 first commit
[root@iZwz9ezwhlhq4ianq3t1elZ git]# cat index.php
<? php

echo phpinfo();

[root@iZwz9ezwhlhq4ianq3t1elZ git]#

但是我们又不想回退了,怎么办?git reset --hard 版本号 ,但是现在的问题假如我已经关掉过一次命令行或者内容的版本号我并不知道呢?要如何知道增加 内容的版本号呢?可以通过如下命令即可获取到版本号:git reflog 演示如下:

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git reflog
5645a14 HEAD@{0}: reset: moving to HEAD~1
4f0f1c4 HEAD@{1}: commit: update
5645a14 HEAD@{2}: commit (initial): first commit

我们这样就可以看到版本号; 4f0f1c4 HEAD@{1}: commit: update,我们可以使用 git reset --hard 4f0f1c4

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git reset --hard 4f0f1c4
HEAD is now at 4f0f1c4 update
[root@iZwz9ezwhlhq4ianq3t1elZ git]# cat index.php
<? php

echo phpinfo();

foreach ($arr as $k=>$v){
 print_r($v`);
}

Git撤销修改和删除文件操作。
比如,我现在又不想回退了,那怎么办,除了 git reset --hard HEAD ~ 1,2,3
我们还可以怎么办

一:撤销修改:

[root@iZwz9ezwhlhq4ianq3t1elZ git]# git checkout -- index.php
[root@iZwz9ezwhlhq4ianq3t1elZ git]# cat index.php
<? php

echo phpinfo();

foreach ($arr as $k=>$v){
 print_r($v`);
}
[root@iZwz9ezwhlhq4ianq3t1elZ git]#

注意:命令git checkout – readme.txt 中的 – 很重要,如果没有 – 的话,那么命令变成创建分支了。待会我们在下面讲到如何创建分支
  
  删除文件
本地文件删除 rm filename , git 的文件 使用 git rm fliename,只要没有commit之前,如果我想在版本库中恢复此文件如何操作呢?

可以使用如下命令 git checkout – filename
提交之后使用 git reset --hard HEAD ~ 1恢复

git diff
执行 git diff 来查看执行 git status 的结果的详细信息。

git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。

尚未缓存的改动:git diff
查看已缓存的改动: git diff --cached
查看已缓存的与未缓存的所有改动:git diff HEAD
显示摘要而非整个 diff:git diff --stat

如果你觉得 git add 提交缓存的流程太过繁琐,Git 也允许你用 -a 选项跳过这一步。命令格式如下:

git commit -am '修改 index.php 文件'
[master 71ee2cb] 修改 index.php 文件
 1 file changed, 1 insertion(+)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值