git学习

1. Git概述

1.1 Git历史

Git诞生于一个极富纷争大举创新的年代。Linux内核开源项目有着位数众多的参与者。绝大多数的Linux内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002),到2002,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper来管理和维护代码。

到了2005,开发BitKeeper的商业公司同Linux内核开源社区的合作关系结束,他们收回了Linux内核社区免费使用BitKeeper的权力。这就迫使Linux开源社区(特别是Linux的缔造者Linux Torvalds)基于使用BitKeeper时的经验教训,开发出自己的版本系统。

他们对新的系统制定了若干目标:

  • 速度

  • 简单的设计

  • 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)

  • 完全分布式

  • 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)

1.2 Git与SVN对比

SVN是集中式版本控制系统,版本库是集中放在中央服务器的 ,而开发人员工作的时候,用的是自己的电脑,所以首先要从中央服务器下载最新的版本 ,然后开发,开发完后,需要把自己开发的代码提交到中央服务器

集中式版本控制工具缺点

  • 服务器单点故障

  • 容错性差

Git是分布式版本控制系统(Distributed Version Control System,简称DVCS),分为两种类型的仓库:本地仓库和远程仓库

  • 本地仓库:是在开发人员自己电脑上的Git仓库

  • 远程仓库:是在远程服务器上的Git仓库

  • Clone:克隆,就是将远程仓库复制到本地

  • Push:推送,就是将本地仓库代码上传到远程仓库

  • Pull:拉取,就是将远程仓库代码下载到本地仓库

1.3 Git工作流程

工作流程如下:

  1. 从远程仓库中克隆代码到本地仓库

  2. 从本地仓库中checkout代码然后进行代码修改

  3. 在提交前先将代码提交到暂存区

  4. 提交到本地仓库。本地仓库中保存修改的各个历史版本

  5. 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库

1.4 Git下载与安装

下载地址:: Redirecting...

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

双击下载的安装文件来安装Git

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

Git GUI:Git提供的图形界面工具

Git Bash:Git提供的命令行工具

2. Git代码托管服务

前面我们已经知道了Git中存在两种类型的仓库 ,即本地仓库和远程仓库 。那么我们如何搭建Git远程仓库呢?我们可以借助互联网上提供的一些代码托管服务 来实现,其中比较常用的有GitHub、码云、GitLab等

2.2 在码云注册账号或登录

要想使用码云的相关服务,需要注册账号或登录(地址:https://gitee.com/signup )

2.3 创建Git远程仓库

登录成功就可以创建远程仓库

创建完成后可以查看仓库信息

每个Git远程仓库都会对应一个网络地址,可以点击克隆/下载按钮弹出窗口并点击复制按钮获得这个网络地址https://gitee.com/chen_xiaoying/my-repo1.git

2.4 邀请其他用户成为仓库成员

前面已经在码云上创建了自己的远程仓库,目前仓库成员只有自己一个人(身份为管理员)。在企业实际开发中,一个项目往往是由多个人共同开发完成的,为了使多个参与者都有权限操作远程仓库,就需要邀请其他项目参与者成为当前仓库的成员。

3. Git常用命令

Git提供了很多命令来完成相应的操作,为了方便学习,我们将这些命令进行了分类。在学习命令的过程中讲解一些Git相关的概念。

在本章我们会学习到如下一些命令和概念:

  • 环境配置

  • 获取Git仓库

  • 工作目录、暂存区以及版本库概念

  • Git工作目录下文件的两种状态

  • 本地仓库操作

  • 远程仓库的使用

  • 分支

  • 标签

3.1 环境配置

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

通过上面的命令设置的信息会保存在~/.gitconfig文件中

3.2 获取Git仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库

获取Git仓库通常有两种方式:

  • 在本地初始化一个Git仓库

  • 从远程仓库克隆

3.2.1 在本地初始化一个Git仓库

执行步骤如下:

  1. 在电脑的任意位置创建一个空目录(例如repo1)作为我们的本地Git仓库

  2. 进入这个目录中,点击右键打开Git bash窗口

  3. 执行命令git init

如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功

3.2.2 从远程仓库克隆

可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地

命令形式为:git clone远程Git仓库地址

3.3 工作目录、暂存区以及版本库概念

为了更好的学习Git,我们需要了解Git相关的一些概念,这些概念在后面的学习中会经常提到

版本库:前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等

工作目录(工作区):包含.git文件夹的目录就是工作目录,主要用于存放开发的代码

暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

3.4 Git工作目录下文件的两种状态

Git工作目录下的文件存在两种状态:

  • untracked 未跟踪(未被纳入版本控制)新建在那里 没有进行声明

  • tracked 已跟踪(被纳入版本控制)

    unmodified 未修改状态该文件没有被修改过

    Modified 已修改状态已经修改但是没有保存

    staged 已暂存状态已经暂时保存了

这些文件的状态会随着我们执行Git的命令发生变化

3.5 本地仓库操作

git status查看文件状态

也可以使用git status -s 使输出信息更加简洁

git add +文件名 将未跟踪的文件加入暂存区{加入已跟踪状态}

将新创建的文件加入暂存区后查看文件状态

git reset +文件名 将暂存区的文件取消暂存git reset HEAD +文件名 也可以

将文件取消暂存后查看文件状态

git commit 将暂存区的文件修改提交到本地仓库

git commit 将暂存区的文件修改提交到本地仓库-m "init hello.txt" 这个必须配 是一个日志信息

git rm 删除文件

删除文件后查看文件状态

上面删除的只是工作区的文件,需要提交到本地仓库

**注意:**无论是修改增加删除,在git里面进行,都会到暂存区,需要提交后才会变成未修改或已删除!!!

将文件添加至忽略列表

一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:# 注释

no .a files

*.a 后缀是a的文件忽略

but do track lib.a, even though you're ignoring .a files above

!lib.a 不忽略lib.a文件

only ignore the TODO file in the current directory, not subdir/TODO

/TODO 忽略TODO这个文件名的文件

ignore all files in the build/ directory

build/ 忽略build包下的文件

ignore doc/notes.txt, but not doc/server/arch.txt

doc/*.txt 忽略doc包下的所有后缀为txt的文件

ignore all .pdf files in the doc/ directory

doc/*/.pdf 忽略doc下的多层目录(包括自身的目录)的pdf文件

由于win系统不可以设置.gitignore 的文件,

因此我们在git里面写 touch .gitignore 创建.gitignore 的文件,在文件里面写要忽略的文件

例子:我要忽略后缀为class的全部文件 则写入*.class即可 git一运行就成功忽略了

git log查看日志记录输入q退出日志浏览

3.6 远程仓库操作

前面执行的命令都是针对本地仓库,本章节我们会学习关于远程仓库的一些操作,具体包括:

  • 查看远程仓库

  • 添加远程仓库

  • 从远程仓库克隆

  • 移除无效的远程仓库

  • 从远程仓库中抓取与拉取

  • 推送到远程仓库

1. 查看远程仓库 git remote

如果想查看已经配置的远程仓库服务器,可以运行git remote 命令。它会列出指定的每一个远程服务器的简写 。如果已经克隆了远程仓库 ,那么至少应该能看到origin,这是Git克隆的仓库服务器的默认名字

git remote git remote-v git remote show origin

2. 添加远程仓库

运行git remote add < shortname> < url>添加一个新的远程Git仓库,同时指定一个可以引用的简写

3. 从远程仓库克隆

如果你想获得一份已经存在了的Git仓库的拷贝,这时就要用到git clone命令。Git克隆的是该Git仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。当你执行git clone命令的时候,默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来。克隆仓库的命令格式是 git cloneurl

4. 移除无效的远程仓库

如果因为一些原因想要移除一个远程仓库,可以使用git remote rm

注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库

5. 从远程仓库中抓取与拉取
  • 从远程仓库中抓取与拉取

git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge

git pull 是从远程仓库获取最新版本并merge到本地仓库

1. git fetch

git fetch 是从远程仓库获取最新版本到本地仓库,不会自动merge合并数据

虽然git fetch不会自动合并数据,但是会提示分支,所以我们可以使用git merge来合并数据

2. git pull

git pull是从远程仓库获取最新版本并merge到本地仓库

注意:如果当前本地仓库不是从远程仓库克隆 ,而是本地创建的仓库 ,并且仓库存在文件 ,此时再从远程拉取文件的时候会报错 (fatal:refusing to merge unrelated histories),解决此问题可以在git pull命令后加入参数--allow-unrelated-histories P254

6. 推送到远程仓库

当你想分享你的代码时,可以将其推送到远程仓库。命令形式:git push remote-name branch-name 分支名

3.7 Git分支

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。Git的master分支并不是一个特殊分支。它跟其它分支没有区别。之所以几乎每一个仓库都有master分支,是因为git init命令默认创建它,并且大多数人都懒得去改动它。

在本章节我们会学习到关于分支的相关命令,具体如下:

  • 查看分支

  • 创建分支

  • 切换分支

  • 推送至远程仓库分支

  • 合并分支

  • 删除分支

1. 查看分支
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地分支和远程分支
2. 创建分支
3. 切换分支
4. 推送至远程仓库分支
5. 合并分支

首先我们先举一个例子,我们在b1分支创建一个Dog.class文件

当我们切换会master分支时,可以看到master分支没有Dog.class

合并分支

有时候合并操作不会如此顺利。如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改比如Dog.class里面有两个分支有不同的属性的时候,Git就没办法合并他们,同时会提示文件冲突(master|mergin)。此时需要我们打开冲突的文件并修复冲突内容git自己加上去的要删除,最后执行git add命令来标识冲突已经解决。

6. 删除分支

如果要删除的分支中进行了一些开发动作对文件进行修改但没有推送到远程仓库,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

7.综合应用

前面我们已经学习完成了Git分支相关的命令,本章节我们通过一个现实中的工作场景来对这些命令进行一个综合练习。

工作场景如下:

开发某个网站。

为实现某个新的需求,创建一个分支。

在这个分支上开展工作。

正在此时,你突然接到一个电话说有个很严重的问题需要紧急修补。你将按照如下方式来处理:

切换到你的线上分支(production branch)。

为这个紧急任务新建一个分支,并在其中修复它。要在线上分支的基础上去创建修复分支

在测试通过之后,切换回线上分支,然后合并这个修补分支,最后将改动推送到线上分支。

切换回你最初工作的分支上,继续工作。

3.8 Git标签

像其他版本控制系统(VCS)一样,Git可以给历史中的某一个提交打上标签 ,以示重要。比较有代表性的是人们会使用这个功能来标记发布结点(v1.0、v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。

在本节中,我们将学习:

  • 列出已有的标签

  • 创建新标签

  • 将标签推送至远程仓库

  • 检出标签

  • 删除标签

1. 列出已有的标签

git tag 列出所有tag

git showtag 查看tag信息

2. 创建新标签

git tag tagName 新建一个tag

3. 将标签推送至远程仓库

git push remote tag 提交指定tag

4. 检出标签

git checkout -b branch tag 新建一个分支,指向某个ta

5. 删除标签

git tag -d tag 删除本地tag

git push origin :refs/tags/tag 删除远程tag

4. 使用TortoiseGit管理文件版本

4.1 TortoiseGit下载与安装

TortoiseGit是一款开源的Git图形界面工具,使用TortoiseGit可以简化Git相关的操作(本质上还是执行的Git相关命令)。

TortoiseGit下载地址:Download -- TortoiseGit -- Windows Shell Interface to Git

下载完成可以得到如下安装程序

直接双击安装即可,安装完成后在桌面(也可以是其他目录)点击右键,看到如下菜单则说明安装成功

在仓库里面绿色对勾表示当前文件处于最新的状态

4.2 TortoiseGit使用

在前面我们已经通过Git命令完成了Git的常用操作,本章节我们会通过TortoiseGit来完成如下操作:

  • 创建仓库

  • 克隆仓库

  • 将文件添加到暂存区

  • 提交文件

  • 推送本地仓库至远程仓库

  • 拉取代码

  • 创建分支

  • 切换分支

  • 合并分支

1. 创建仓库
2. 克隆仓库
3. 将文件添加到暂存区
4. 提交文件

可以把文件先放入暂存区再提交,也可以一次性直接提交

5. 推送本地仓库至远程仓库克隆远程仓库的
5. 拉取代码没有克隆远程仓库的

新建一个仓库,然后加文件进去进行push

由于是没有克隆的,所以Destination那里的没有可以选的,需要手动配置,点击Manage进行

6. 拉取代码
7. 创建分支
8. 切换分支
9.合并分支

在什么基础上进行创建的新分支,将要合并时,要切换成以基础的分支然后进行合并

10. 推送指定分支到远程仓库

push

5. 在IDEA中使用Git

5.1 在IDEA中配置Git

安装好IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径

选择File-Settings打开设置窗口,找到Version Control下的git选项:

选择git的安装目录后点击"Test"按钮测试是否正确配置

5.2 在IDEA中使用Git

本章节我们会学习在IEDA中使用进行版本管理,具体包括:

  • 在IDEA中创建工程并将工程添加到Git

  • 将文件添加到暂存区

  • 提交文件

  • 将代码推送到远程仓库

  • 从远程拉取代码

  • 版本对比

  • 创建分支

  • 切换分支

  • 分支合并

1. 在IDEA中创建工程并将工程添加到Git

当然并不是全部的工程文件都要git进行管理容易发现冲突,所以我们需要把.gitgnore忽略名单放在工程下,然后再里面编写不需要被git管理的文件,以下不需要的有:

.idea目录、工程名称.iml、maven生成的target包

在.gitgnore写

.idea/

gittest.iml

target/

2. 将文件添加到暂存区
3. 提交文件
4. 将代码推送到远程仓库
5. 从远程仓库克隆工程到本地
6. 从远程拉取代码到本地仓库
7. 版本对比

这个功能可以根据之前修改的版本和现在的版本进行对比,可以知道做了哪些改变

8.创建分支
9. 切换分支
10. 分支合并

b1是本地分支,下面那个是远程分支

6.使用SSH协议传输数据

6.1 Git支持的传输协议

由于Git的远程仓库并不在我们本地,当我们在使用远程仓库的时候(例如克隆、拉取、推送)就会涉及到数据的网络传输,Git支持多种数据传输协议

  • 本地协议(Local)

  • HTTPS协议

  • SSH(Secure Shell)协议

  • Git协议

我们前面的操作都是基于HTTPS协议进行的,本章节我们会学习如何使用SSH协议

6.2 什么是SSH协议

SSH为Secure Shell(安全)的缩写,由IETE的网络小组(Network Working Group)所制定。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理工程中的信息泄露问题。

由于本地Git仓库和远程仓库之间的传输是通过SSH加密的,所以必须要让远程仓库服务器认证你的SSH key,在此之前,必须要生成SSH key。

使用SSH协议通信时,推荐使用基于密钥的验证方式。你必须为自己创建一对密钥(公玥和私钥),并把公钥放在需要访问的服务器上。

6.3 配置SSH协议

可以使用Git提供的命令行工具Git Bash生成公钥和私钥,具体操作工程如下:

  1. 使用命令ssh-keygen -t rsa生成公钥和私钥,执行完成后在window本地用户ssh目录C:\Users\用户名.ssh下面生成如下名称的公钥和私钥

git第二次学习

git help

git help

使用git help 可以显示常用的git命令和解释

git help -a

显示全部命令和具体解释

git help -g

查看git的使用手册

git help add

可以查看关于add有关的详细命令使用

快捷键

F 向下换页

B 向上换页

Q 退出

git config

git提供了一个叫做git config的工具。主要用来配置或者读取相应的环境变量。而这些环境变量,决定了git在各个环节的具体工作方式和行为。

git config配置文件的存放位置

  • ./etc/gitconfig 文件:包含了适用于系统所有用户和所有库的值(作用域)。如果你传递参数选项 -system给git config,它将明确的读和写这个文件。

    复制代码
    git config --system user.name "chen"
    git config --system user.email "chenxiaoying@qq.com"
  • ~/.gitconfig 文件:具体到你的用户。你可以通过传递 --global选项使git读或写这个特定的文件。也就是说不同的用户可以拥有不同的配置

    复制代码
    git config --global user.name "xujun"
    git config --global user.email "chenxiaoying@qq.com"
  • 位于git目录的config文件(也就是**.git/config** ):无论你当前在用的库是什么,特定指向该单一的库。每个级别重写前一个级别的值。因此,在.git/confif中的值覆盖了在etc.gitconfig中的同一个值。

在window系统上,git会找寻用户主目录下的.gitconfig文件。主目录即$HOME变量指定的目录,一般都是C:/Users{UserName}。此外,git还会尝试找寻/mingw64/etc/gitconfig 文件,只不过看当初git装在什么目录,就以此作为根目录来定位。比如我的git安装目录是C:\Program\Files\Git,那么相应的文件位置是C:\Program Files\Git\mingw64\etc 。

  1. 配置命令:

    复制代码
    git config --global user.name "xxx"
    git config --global user.email xxxxx@163.com
    git config --global color.ui true
  2. 查看配置:

    复制代码
    git config --list # 将配置文件列出来
    cat ~/.gitconfig # 查看配置文件 linux
  3. 重置配置信息里面的某个信息

    复制代码
    git config unset --global user.name

git -init

  1. 初始化

    使用当前目录作为git仓库,我们只需使它初始化

    复制代码
    git init

    该命令执行玩后会在当前目录生成一个.git目录

    使用我们指定目录作为git仓库 在控制台的当前目录的文件夹创建git仓库 没有文件夹会自动创建

    复制代码
    git init k

除了config这个文件,.git的作用就是存储项目级别的配置信息。

git -commit

  1. 显示工作目录和暂存区的状态

    复制代码
    git status
  2. 提交目录下所有文件

    复制代码
    git add .
  3. 提交指定文件

    复制代码
    git add xxx.格式
  4. 提交说明 说明就是备注

    复制代码
    git commit -m '说明'
  5. 查看历史提交

    复制代码
    git log

git diff

  1. 查看修改前后的区别

    git diff

    加号表示添加的内容,减号表示删除的内容

    即使是修改某一行,也会显示删除和添加

  2. 查看暂存区和Reportory的区别

    复制代码
    git diff --staged

git -rename

直接给文件重命名查看发现 git会认为本地的文件删除 而重命名的文件认为新增文件

  1. 告诉git,删除了某文件 也可以说要重命名该文件

    复制代码
    git rm xxx.格式
  2. 添加重命名后的文件

    复制代码
    git add xxx.格式
  3. 查看状态可知,会显示renamed某个文件,git认为该文件是被重命名了

git -mv

  1. 重命名文件

    复制代码
    git mv 旧文件.格式 新文件.格式
  2. 查看状态

    复制代码
    git -status
  3. 提交

    复制代码
    git commit -m '把某某重命名为某某某'
  4. 移动文件或目录

    复制代码
    git不会跟踪空白目录,新建目录后,查看状态时不会提示有新文件夹
    git mv xxx.格式 新文件夹/
    git mv 旧文件夹 新文件夹/

查看状态时会提示重名了,新文件名包含文件路径。

git -rm

  1. 删除文件

    复制代码
    git rm xxx.格式
  2. 查看状态

    复制代码
    git status
  3. 提交

    复制代码
    git commit -m '删除了某某某文件'

删除之前要确定这个文件已经在Git Reportory中 ,并且没有 将要被提交的修改,否则不会允许删除。

git -head

  1. 删除文件

    复制代码
    git rm xxx.格式
  2. 恢复文件

    复制代码
    git checkout HEAD -- xxx.格式 #HEAD代表最近的一次提交,--表示当前分支
  3. 提交删除后恢复文件

    如果是rm删除后并commit提交后,工作目录变成干净的,此时想要恢复的话,需要恢复到最近一次的上次提交

    复制代码
    git checkout HEAD^ -- xxx.格式 # ^b

git -revert

一行一行显示历史提交

复制代码
git log --oneline

恢复某次提交

复制代码
git revert id号

再次提交,会覆盖掉id号后面的提交。也可以说是将上次的错误提交撤销

git -reset

git的提交 其指针都会指向最新的一次提交

git -reset 相当于将指针回到该id号的那次提交 ,而那次提交的数据根据情况,会显示没有提交或者提交的修改内容全部情况

  1. soft

    不会影响到工作区和暂存区的东西。

    复制代码
    git log --oneline
    git reset --soft id号 #将指针指向id这次提交

    再次提交,会覆盖id号后面的提交

    也就是说,该id的提交修改内容直接撤回提交,但修改的数据放回暂存区,可以进行修改

  2. hard

    会把暂存区的东西重置到指定的提交状态,并把指针指向这个提交

    复制代码
    git reset --hard id号

    会发现工作目录干净了。 该id号提交的内容全部清空

  3. mixed

    把工作区和暂存区直接重置到一个提交的状态。

    复制代码
    git reset --mixed id1

    会发现暂存区中的东西不见了,需要git add添加并commit提交。

    但是该提交的内容还是存在的。

soft:回到id号的提交,将前面提交的数据放回暂存区

mixed:回到id号的提交,将前面提交的数据直接放回仓库

hard:回到id号的提交,将前面的提交全部清空

git -branch

  1. 查看项目所有的分支

    复制代码
    git branch

    "*"星号表示当前分支的位置

  2. 创建新分支

    复制代码
    git branch xxx
  3. 切换分支

    复制代码
    git checkout xxx

git-checkout

  1. 查看提交历史(显示是哪个分支上的)

    复制代码
    git log --oneline --decorate
  2. 切换到主分支

    复制代码
    git checkout master

此时查看历史只能查看master分支上的提交

  1. 查看所有分支的历史提交

    复制代码
    git log --oneline --decorate --all

git-branch-diff

  1. 查看两个分支的区别

    复制代码
    git diff master.某分支
  2. 查看两个分支的同一文件的区别

    复制代码
    git diff master..某分支 莫文件

git-fast-forward

  1. 合并某分支到master

    复制代码
    git merge 某分支

这是一个Fast-forward,不会是一个新的提交,查看历史提交,会显示最后一次是在分支上进行的提交。

复制代码
git diff master..某分值

对比后没有区别

git-merge

  1. 切换分支

    复制代码
    git checkout 某分支
    git branch #查看当前分支
  2. 快捷提交

    复制代码
    git commit -am '说明'  # 这样做旧不需要add了
    git log --oneline #查看历史提交
  3. master和某分支均已修改的情况下合并

    不能再使用Fast-forward

    复制代码
    git log --oneline --decorate --all -19 --graph # 查看前10条所有分支的历史提交
    git branch # 查看当前所在分支
    git merge 某分支

    输入合并提交的描述(可保持默认)

    再次查看:

    复制代码
    git log --oneline --decorate --all -19 --graph #查看10条,所有分支的历史提交

git-conflict

  1. 合并分支时出现冲突

    将master合并到某分支时

    复制代码
    git merge master

    提示conflict(content):Merge conflict in xxx.

    到该文件中,git已经给标出冲突的内容,删掉我们不需要的,留下需要的即可:

    复制代码
    <<<<<<< HEAD
    内容
    =======
    内容
    >>>>>>> master

    接下来提交:

    复制代码
    git add .
    git commit # 这里可以不用写描述信息

    把弹出的内容中Conflicts那几行代码删除,保存退出,即合并成功,查看一下日志:

    复制代码
    git log --oneline --decorate --all --graph

rm-branch

  1. 给分支重命名

    复制代码
    git branch -m 已经存在的分支 新名字
  2. 删除分支

    复制代码
    git branch -d 某分支

stash(保存修改成进度 可切换其他分支对其他分支进行修改)

  1. 保存工作进度

    查看状态:

    复制代码
    git status

    看到有已经修改过的,但想修改其他的提交,并不想提交它,就保存当前进度:

    复制代码
    git stash save '修改了某某文件'
    git status # 目录是干净的
  2. 查看保存的工作进度的列表

    复制代码
    git stash list
  3. 对比工作进度和现在目录的区别

    复制代码
    git stash show -p stash@{代号} # 代号使用git stash list 查看
  4. 恢复工作进度

    复制代码
    git stash apply stash@{代号}
  5. 删除工作进度

    复制代码
    git stash drop stash@{0}
  6. 恢复工作进度时直接删除工作进度

    复制代码
    git stash pop stash@{代号}

log

  1. 查看历史

    复制代码
    git log

    默认显示全部提交日志

    f键向下翻页,b键 向上翻页,q键 退出显示

  2. 显示简单的日志列表

    复制代码
    git log --oneline # 显示简单的日志列表
    git log --oneline -行数
    git log --oneline --author="作者"
  3. 显示指定内容的提交

    "内容"为说明中所写到的。

    复制代码
    git log --oneline --grep='内容'
  4. 显示指定日期的提交

    复制代码
    git log --oneline --before='2021-08-03' #2021.08.03之前的提交
    git log --oneline --before='1 week' #1周之前的提交
    git log --oneline --before='3 days' # 3天之前的提交
  5. 图形效果

    复制代码
    git log --oneline --graph
  6. 查看log详细使用手册

    复制代码
    git help log

alias

  1. 给常用命令添加别名

    给checkout设置别名为alias:

    复制代码
    git config --global alias.co checkout # 设置checkout 为co

    查看配置:

    复制代码
    cat ~/.gitconfig
  2. 给命令行命令设置别名

    复制代码
    vi ~/.bashrc

    给 git checkout设置别名,修改配置文件

    复制代码
    alias gco='git checkout'

    sourch一下生效:

    复制代码
    source ~/.bashrc

ignore

让git忽略某个文件

创建忽略名单

复制代码
git config --global core.excludesfile ~/.gitignore_global

直接在名单里面编辑想要忽略的文件

gitignore

  1. 在项目根目录下指定需要忽略的文件

    复制代码
    vi .gitignore

    在window就是直接创建一个文件就好

    比如想忽略所有扩展名为".log"的文件,输入:

    复制代码
    *.log

    保存退出。

    提交:

    复制代码
    git add.
    git commit -m '添加了.gitgnore 文件'

    git不会忽略已经被跟踪的文件,可以取消跟踪,忽略规则才会生效。

    参考:.gitignore文件模板链接

remote

学习github远程代码库

也就是说 git是一种工具,而gitee、github、gitliab是远程代码库,可以用于多人协作开发等等。

orign

复制代码
git remote add origin 远程代码库地址

查看:

复制代码
git remote

查看更详细的信息

复制代码
git remote -v

移除远程:

复制代码
git remote rm 远程名

push

推送master:

复制代码
git push -u origin master

输入用户和密码,如何会代码文件

查看本地和远程的分支

复制代码
git branch -a #查看本地所有分支
git branch -r # 查看远程分支

将其他某分支推送上去:

复制代码
git push -u origin 某分支

clone

如果需要项目的代码进行参考什么的,就直接download就可以了

如果是需要这个版本库,则需要git clone进行克隆

李四克隆张三的远程库到本地某个目录下:

复制代码
git clone https://xxxx.git 目标目录

张三在本地修改了文件push到github上:

复制代码
cd 目标目录
git checkout master # 切换到主分支
# 修改文件……
git commit -am '修改了某文件' # 提交
git push origin master # 把提交推送到远程

fetch

从远程库提取更新

复制代码
git fetch

查看状态

复制代码
git status

会提示远程库上有更新

合并分支

复制代码
git merge origin/master

再次查看状态:

复制代码
git status

提示已经保持一致了。

fork

到github页面上点击fork,就会把代码库复制一份到自己的账户下。

再把自己账户下的这个库克隆到自己本地进行开发。

复制代码
git clone https://xxx.git 目标目录

cd 到该目标目录

可以在该项目下配置git:

复制代码
git config user.name '李四'
git config user.email '某某@163.com'

添加readme.md:

复制代码
vi README.md
git add .
git commit -m '添加了README.md 文件'
git push origin master # 输入李四的用户名和密码

打开李四的版本库,可以看到最后一次更新来自他自己。

pull-request

李四申请将代码pull到张三的代码库

也就是合并请求

collaborator

将王二麻子添加为贡献者,这样他就能和张三一起开发。

从张三的代码库中克隆代码到本地,修改代码后,提交,然后检查远程库有没有更新:

复制代码
git fetch

没有更新的话就push到远程:

复制代码
git push origin master

git分支从master改为main

2020年github上的主分支的名称从master改为了main,但是git的主分支名称仍然是master,在本地修改主分支的方法如下:

复制代码
git branch -M main
  1. git配置socks5 代理

    其中port根据代理给定的端口号进行设置:

    复制代码
    git config --global http.proxy 'socks5://127.0.0.1:port'
    git config --global https.proxy 'socks5://127.0.0.1:port'

    如果你有代理可以这样使用,没有代理就只能看自己网络是否顺利访问github

  2. 第一次push代码的步骤

    复制代码
    git init
    git add .
    git commit -m '说明'
    git remote add origin https://xxx.git
    git push -u origin main
相关推荐
Linux-lucky2 小时前
28-Linux学习之旅之Maven与Nexus制品库
linux·运维·学习·nginx·tomcat·maven
kyrie_sakura2 小时前
python学习笔记3 -- 流程控制语句结构
笔记·python·学习
冷凝娇2 小时前
【Pytest】2026 学习总结
学习·pytest
hh9504 小时前
Agent Plan x DeepSeek Harness — Token 预算管理与成本追踪体系技术
人工智能·学习·adg·火山引擎·adg成都社区
丰锋ff4 小时前
基于 Qt 的智能门禁系统
qt·学习
小小帅呀4 小时前
学习 VLA 第 2 天:深度学习基础
人工智能·深度学习·学习
具身AGI4 小时前
人类第一视角数据走上评测台:物理AI 人类学习路线
学习
dadaobusi5 小时前
5G核心网概念复习
学习
慧福堂6 小时前
偏印详解:十神中的智慧与孤影,如何善用偏印成就人生
大数据·学习·学习方法·八字·风水