Git

181 阅读6分钟

1. Git安装&&配置

1.1 下载

下载地址: git-scm.com/download

image.png

1.2 安装

下载完成后可以得到如下安装文件:

image.png

双击下载的安装文件来安装Git。安装完成后在电脑桌面(也可以是其他目录)点击右键,如果能够看到如下两个菜单则说明Git安装成功。

备注:
Git GUI:Git提供的图形界面工具
Git Bash:Git提供的命令行工具

1.3 基础配置

git 的设置使用 git config 命令。

当安装Git后首先要做的事情是设置用户名称和email地址。这是非常重要的,因为每次Git提交都会使用 该用户信息

  1. 打开Git Bash
  2. 设置用户信息
git config --global user.name “itcast” 
git config --global user.email “hello@itcast.cn” 

1.4 其他配置

  1. 显示当前的 git 配置信息:
#全部配置
git config --list
#用户名
git config --global user.name
#邮箱
git config --global user.email
  1. 设置提交代码时的用户信息编辑 git 配置文件:
$ git config --global user.name "runoob"
$ git config --global user.email test@runoob.com

如果去掉 --global 参数只对当前仓库有效。

  1. 编辑 git 配置文件:
$ git config -e    # 针对当前仓库 

或者:

$ git config -e --global   # 针对系统上所有仓库

1.5 GitBash乱码问题

  1. 打开GitBash执行下面命令
git config --global core.quotepath false
  1. githome/etc/bash.bashrc文件最后加入下面两行{git_home}/etc/bash.bashrc 文件最后加入下面两行 {git_home}指的是git的安装目录
export LANG="zh_CN.UTF-8" 
export LC_ALL="zh_CN.UTF-8"

2. 工作流程

image.png

  1. clone(克隆): 从远程仓库中克隆代码到本地仓库
  2. checkout (检出):从本地仓库中检出一个仓库分支然后进行修订
  3. add(添加): 在提交前先将代码提交到暂存区
  4. commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
  6. pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于 fetch+merge
  7. push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库

3. 操作命令

Git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行Git 的命令而发生变化。

状态.png

3.1 初始化仓库

3.1.1获取本地仓库

要使用Git对我们的代码进行版本控制,首先需要获得本地仓库:
1)在电脑的任意位置创建一个空目录(例如test)作为我们的本地Git仓库
2)进入这个目录中,点击右键打开Git bash窗口
3)执行命令

git init


4)如果创建成功后可在文件夹下看到隐藏的.git目录。

Git init.png 使用我们指定目录作为Git仓库

git init newrepo

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

3.1.2 克隆仓库

我们使用 git clone 从现有 Git 仓库中拷贝项目(类似 svn checkout)。

克隆仓库的命令格式为:

git clone <repo>

如果我们需要克隆到指定的目录,可以使用以下命令格式:

git clone <repo> <directory>

参数说明:

  • repo: Git 仓库。
  • directory: 本地目录。

比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:

$ git clone git://github.com/schacon/grit.git

执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个 .git 的目录,用于保存下载下来的所有版本记录。

如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

$ git clone git://github.com/schacon/grit.git mygrit

3.2 添加(工作区 --> 暂存区)

#添加一个或多个文件到暂存区:
git add [file1] [file2] ...
#添加指定目录到暂存区,包括子目录:
git add [dir]
#添加当前目录下的所有文件到暂存区:
git add .
git add 单个文件名|通配符

3.3 查看状态

git status 命令用于查看在你上次提交之后是否有对文件进行再次修改。

git status.png

通常我们使用 -s 参数来获得简短的输出结果: git status -s.png

以下实例我们添加两个文件: git status 命令用于查看项目的当前状态

$ touch README              # 创建文件
$ touch hello.py            # 创建文件
$ ls                        # 查看文件
README        hello.php
$ git status -s             。
?? README
?? hello.php
$ 

接下来我们执行 git add 命令来添加文件:

git add .

现在我们再执行 git status,就可以看到这两个文件已经加上去了。

$ git status -s
A  README
A  hello.php
$ 

现在我们修改 README 文件: 在 README 添加以下内容: # Runoob Git 测试,然后保存退出。

再执行一下 git status:

$ git status -s
AM README
A  hello.php

AM 状态的意思是这个文件在我们将它添加到缓存之后又有改动。改动后我们再执行 git add . 命令将其添加到缓存中:

$ git add .
$ git status -s
A  README
A  hello.php

文件修改后,我们一般都需要进行 git add 操作,从而保存历史版本。

3.3 对比

git diff 命令比较文件的不同,即比较文件在暂存区和工作区的差异。

git diff 有两个主要的应用场景。

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

显示暂存区和工作区的差异:

$ git diff [file]

显示暂存区和上一次提交(commit)的差异:

$ git diff --cached [file]
或
$ git diff --staged [file]

显示两次提交之间的差异:

$ git diff [first-branch]...[second-branch]

git status 显示你上次提交更新后的更改或者写入缓存的改动, 而 git diff 一行一行地显示这些改动具体是啥。
在 readme.md 文件中输入以下内容:+123123
接下来我们来查看下 git diff --cached 的执行效果:

git diff.png

3.4 添加(暂存区 --> 仓库)

前面章节我们使用 git add 命令将内容写入暂存区。

git commit 命令将暂存区内容添加到本地仓库中。

提交暂存区到本地仓库中:

git commit -m '注释内容'
$ git commit [file1] [file2] ... -m [message]

-a 参数设置修改文件后不需要执行 git add 命令,直接来提交

$ git commit -a

提交修改

接下来我们就可以对 hello.php 的所有改动从暂存区内容添加到本地仓库中。

以下实例,我们使用 -m 选项以在命令行中提供提交注释。

$ git add hello.php
$ git status -s
A  README
A  hello.php
$ git commit -m '第一次版本提交'
[master (root-commit) d32cf1f] 第一次版本提交
 2 files changed, 4 insertions(+)
 create mode 100644 README
 create mode 100644 hello.php
 

现在我们已经记录了快照。如果我们再执行 git status:

$ git status
# On branch master
nothing to commit (working directory clean)

以上输出说明我们在最近一次提交之后,没有做任何改动,是一个 "working directory clean",翻译过来就是干净的工作目录。

如果你没有设置 -m 选项,Git 会尝试为你打开一个编辑器以填写提交信息。 如果 Git 在你对它的配置中找不到相关信息,默认会打开 vim。屏幕会像这样:

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# modified:   hello.php
#
~
~
".git/COMMIT_EDITMSG" 9L, 257C

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

git commit -a

我们先修改 hello.php 文件为以下内容:

<?php
echo '菜鸟教程:www.runoob.com';
echo '菜鸟教程:www.runoob.com';
?>

再执行以下命令:

$ git commit -am '修改 hello.php 文件'
[master 71ee2cb] 修改 hello.php 文件
 1 file changed, 1 insertion(+)

为常用指令配置别名(可选) 有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。 1. 打开用户目录,创建 .bashrc 文件 部分windows系统不允许用户创建点号开头的文件,可以打开gitBash,执行 touch ~/.bashrc 2. 在 .bashrc 文件中输入如下内容:

#用于输出git提交日志 
alias git-log='git log --pretty=oneline --all --graph --abbrev-commit' 
#用于输出当前目录所有文件及基本信息 
alias ll='ls -al'