Git学习笔记

文章目录

    • 什么是Git
    • Git安装(windows)
    • Git配置
      • 设置用户信息
      • 设置文本编辑器
      • 查看配置信息
    • 工作流程
    • Git 工作区、暂存区和版本库
    • 基本操作
      • 创建仓库git init
      • 添加缓存git add 文件名
      • **git add .** 命令来添加当前项目的所有文件。
      • 克隆仓库git clone
      • 查看项目当前状态git status
      • 修改并保持文件
      • 查看改动的详细信息git diff
      • 将缓存区内容添加到仓库中git commit
      • 命令用于取消已缓存的内容git reset HEAD
      • 删除文件git rm
      • 移动或重命名git mv
      • 查看提交历史git log
      • 打上标签(版本号)git tag
    • Git 分支管理
      • 创建、切换分支
      • 合并分支
      • 合并冲突
      • 列出分支
      • 删除分支
    • Git 远程仓库(Github)
      • 添加远程仓库
      • 查看当前的远程库
      • 提取远程仓库
      • 推送到远程仓库
    • 删除远程仓库

什么是Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。其工作:创建和保存你的项目的快照及与之后的快照进行对比。

分布式版本控制系统:不必服务器端软件支持。

Git安装(windows)

Git下载地址:http://git-scm.com/downloads、

https://gitforwindows.org/(windows平台)

完成安装之后,就可以

1.使用命令行的 git 工具(已经自带了 ssh 客户端)

2.图形界面的 Git 项目管理工具。在开始菜单里找到"Git"->“Git Bash”,会弹出 Git 命令窗口,你可以在该窗口进行 Git 操作。

Git配置

1.git config :专门用来配置、读取相应的环境变量。

2.各变量及存放的位置:

  • /etc/gitconfig 文件:适用于所有用户的配置。(读取文件方法: git config 加上 --system 选项。)
  • ~/.gitconfig 文件:用户目录下的配置文件,只适用于该用户。(读取方法: git config 加上--global 选项)
  • .git/config 文件:当前项目的 Git 目录中的配置文件,针对当前项目。每一个级别的配置都会覆盖上层的相同配置,所以 .git/config 里的配置会覆盖 /etc/gitconfig 中的同名变量。

在 Windows 系统上,Git 会找寻用户主目录下的 .gitconfig 文件。主目录即 $HOME 变量指定的目录,一般都是 C:\Documents and Settings$USER。

此外,Git 还会尝试找寻 /etc/gitconfig 文件,只不过看当初 Git 装在什么目录,就以此作为根目录来定位。

设置用户信息

配置个人的用户名称和电子邮件地址:

$ git config --global user.name "runoob"
$ git config --global user.email [email protected]

如果用了 –global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

设置文本编辑器

设置Git默认使用的文本编辑器, 一般可能会是 Vi 或者 Vim。如果你有其他偏好,比如 Emacs 的话,可以重新设置::

$ git config --global core.editor emacs

查看配置信息

要检查已有的配置信息,可以使用 git config --list 命令

有时候会看到重复的变量名,那就说明它们来自不同的配置文件(比如 /etc/gitconfig 和 ~/.gitconfig),不过最终 Git 实际采用的是最后一个。

也可以在 ~/.gitconfig/etc/gitconfig 看到,如下所示:

vim ~/.gitconfig 

显示内容如下所示:

[http]
    postBuffer = 2M
[user]
    name = runoob
    email = [email protected]

也可以直接查阅某个环境变量的设定,只要把特定的名字跟在后面即可,像这样:

$ git config user.name
runoob

工作流程

  • 克隆 Git 资源作为工作目录。
  • 在克隆的资源上添加或修改文件。
  • 如果其他人修改了,你可以更新资源。
  • 在提交前查看修改。
  • 提交修改。
  • 在修改完成后,如果发现错误,可以撤回提交并再次修改并提交。

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

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

基本操作

创建仓库git init

初始化当前目录作为Git仓库:git init

初始化指定目录作为Git仓库:git init 指定目录

命令执行完后会在目录生成一个 .git 目录,所有 Git 需要的数据和资源都存放在这个目录中。

添加缓存git add 文件名

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

$ git add *.c
$ git add README
$ git commit -m '初始化项目版本'

以上命令将目录下以 .c 结尾及 README 文件提交到仓库中。

git add . 命令来添加当前项目的所有文件。

克隆仓库git clone

从现有 Git 仓库中克隆项目(或与他人合作一个项目):git clone [url]

从仓库克隆到指定的目录:git clone 仓库 指定目录/自己定义要新建的项目目录名称

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

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

查看项目当前状态git status

-s 参数,以获得简短的结果输出

“A” 状态:这个文件在我们将它添加到缓存了

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

修改并保持文件

修改文件:一般默认vim修改

$ vim README

再执行一下 git status:

$ git status -s
AM README
A  hello.php

“A” 状态:这个文件在我们将它添加到缓存了

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

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

查看改动的详细信息git diff

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

将缓存区内容添加到仓库中git commit

-m 选项:在命令行中提供提交注释。

-a 选项:跳过git add提交缓存这一步

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

命令用于取消已缓存的内容git reset HEAD

删除文件git rm

-f:强制删除

–cached:从暂存区域移除,但仍然希望保留在当前工作目录中(从跟踪清单中删除)

-r:递归删除目录中的所有子目录和文件

移动或重命名git mv

查看提交历史git log

–oneline 选项来查看历史记录的简洁的版本。

–graph 选项,查看历史中什么时候出现了分支、合并

–reverse 参数来逆向显示所有日志。

查找指定用户的提交日志可以使用命令:git log --author=

指定日期,可以执行几个选项:–since={3.weeks.ago} 和 --before={2010-04-18},但是你也可以用 --until ={}和 --after={}。

打上标签(版本号)git tag

我推荐一直创建带注解的标签。

$ git tag -a v1.0 

当你执行 git tag -a 命令时,Git 会打开你的编辑器,让你写一句标签注解,就像你给提交写注解一样。

无参:查看所有标签

-a:意为"创建一个带注解的标签"。

–decorate :我们可以看到我们的标签了

如果我们忘了给某个提交打标签,又将它发布了,我们可以给它追加标签:$ git tag -a v0.9 85fc7e7

指定标签信息命令:

git tag -a  -m "runoob.com标签"

PGP签名标签命令:

git tag -s  -m "runoob.com标签"

Git 分支管理

创建、切换分支

创建分支命令:

git branch (branchname)

当你执行 git init 的时候,默认情况下 Git 就会为你创建 master 分支。

如果我们要手动创建一个分支。执行 git branch (branchname) 即可。

切换分支命令:

git checkout (branchname)

当你切换分支的时候,Git 会用该分支的最后提交的快照替换你的工作目录的内容, 所以多个分支不需要多个目录。

git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下

合并分支

合并分支命令:(把分支合并到当前分支种)

git merge 被并分支

你可以多次合并到统一分支, 也可以选择在合并之后直接删除被并入的分支。

合并冲突

合并并不仅仅是简单的文件添加、移除的操作,Git 也会合并修改。

列出分支

列出分支基本命令:

git branch

无参数:会列出你在本地的分支。

删除分支

删除分支命令:

git branch -d (branchname)

Git 远程仓库(Github)

https://www.runoob.com/git/git-remote-repo.html

添加远程仓库

1.添加远程仓库

(添加之前先初始化创建一个本地仓库)

进入该本地仓库输入命令

git remote add 本地仓库名 [email protected]:用户名/仓库名.git

2.本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:

使用以下命令生成 SSH Key:

$ ssh-keygen -t rsa -C “github的注册邮箱”

3.之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开 id_rsa.pub,复制里面的 key

4.回到 github 上,进入 Account => Settings(账户配置)。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AI9utu9I-1581006476236)(E:\笔记\多媒体\github远程仓库1.jpg)]

5.左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,再粘贴在你电脑上生成的 key。

6.验证是否成功,输入以下命令:

$ ssh -T [email protected]
Hi tianqixin! You've successfully authenticated, but GitHub does not provide shell access.

说明我们已成功连上 Github。

7.登录后点击" New repository " 如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gVCQQ9Tx-1581006476238)(E:\笔记\多媒体\github远程仓库2.jpg)]

在Repository name 填入 远程仓库名,点击"Create repository"按钮,就成功地创建了一个新的Git仓库

一些操作:

# 提交到 Github
$ git remote add origin [email protected]:tianqixin/runoob-git-test.git
$ git push -u 本地仓库名 master

查看当前的远程库

查看当前配置有哪些远程仓库

git remote

-v 参数,你还可以看到每个别名的实际链接地址。

提取远程仓库

远程仓库下载新分支与数据:git fetch 远程仓库名

该命令执行完后需要执行:git merge 远程仓库名/分支名,合并到你所在的任意分支。 (这儿的/不是或的意思)

推送到远程仓库

推送你的新分支与数据到某个远端仓库:

git push 远程仓库名 分支名

删除远程仓库

删除远程仓库你可以使用命令:

git remote rm 远程仓库名

你可能感兴趣的:(git,github)