Git命令汇总(自用,持续更新update 5/23)

文章目录

  • Git常见命令
    • [1. 推送空提交](#1. 推送空提交)
    • [2. 提交Clean-PR](#2. 提交Clean-PR)
    • [3. 回退add操作](#3. 回退add操作)
    • [4. 交互式rebase](#4. 交互式rebase)
      • [4.1 切换模式](#4.1 切换模式)
      • [4.2 保存与退出](#4.2 保存与退出)
      • [4.3 注意Rebase](#4.3 注意Rebase)
    • [5. 合并多个commit](#5. 合并多个commit)
  • [问题一:Clone Github报错The TLS connection was non-properly terminated.](#问题一:Clone Github报错The TLS connection was non-properly terminated.)
  • [问题二:Failed to connect to 127.0.0.1 port 7890 after 2030 ms: Couldn't connect to server](#问题二:Failed to connect to 127.0.0.1 port 7890 after 2030 ms: Couldn't connect to server)

Git常见命令

太常见的四件套 clone、pull、commit、push 就不说了。

1. 推送空提交

bash 复制代码
git commit --allow-empty -m "Empty-Commit"

然后push一下就OK了。

Q: why空提交?

A: 因为对于Github上面需要CI的项目,检查流水线或者是CLA协议卡住了。第一种方法是手动重新构建流水线然后同时构建分支流水线。但是如果无法手动启动构建,那么唯一的构建方法就是使用 Git。这时候你不需要做任何修改,只需要构建项目,所以需要推送一个空的提交来启动构建。


2. 提交Clean-PR

【注意】 这是为了很大型项目开发过程中,覆盖远程旧分支以保持干净的commit历史,方便Review,但是此操作仅适用于个人分支,用在主分支的时候务必小心!!!

  1. 添加上游仓库并同步最新代码

    bash 复制代码
    git remote add upstream https://github.com/Echo-Nie/Demo.git
    git fetch upstream develop
  2. 基于上游的develop创建新分支

    bash 复制代码
    git checkout -b clean-PRtest upstream/develop
  3. 应用本地修改到新分支

    • 方法一:Cherry-pick

      我个人常用的是这个,首先找到localTest分支的提交哈希

      (使用git log localTest查看),然后:

      bash 复制代码
       git cherry-pick <hash>
    • 方法二:合并修改内容

      localTest的更改合并到clean-test

      bash 复制代码
      git merge localTest --squash  # 合并并压缩为一个提交
      git commit -m "提交信息"
  4. 强制推送到远程test分支:

    bash 复制代码
    git push origin clean-test:test --force

3. 回退add操作

首先看看哪些文件加进去了

bash 复制代码
git status

回退git add所有文件:

bash 复制代码
 git reset HEAD

回退部分文件:

bash 复制代码
git reset HEAD fileName

4. 交互式rebase

在使用 Git 进行交互式 rebase 时,您可能会用到 Vim 或类似的文本编辑器来修改提交历史。以下是详细的步骤和说明,帮助您理解如何在这种情况下使用 Vim 来进行操作。

4.1 切换模式

  1. 正常模式切换到插入模式:如果需要编辑文本内容(如更改提交信息),首先确保自己处于 Vim 的 Normal Mode 。如果不是,请按 Esc 键退出其他模式。然后按下 i 键进入 Insert Mode 。此时,

  2. 从可视模式或命令行模式切换到插入模式

    如果当前处于可视模式(Visual Mode)或命令行模式(Command-line Mode),请先按 Esc 键返回到正常模式,然后再按 iao 等键进入插入模式。具体来说,

    • i:在光标所在位置前开始插入;
    • a:在光标所在位置后开始插入;
    • o:在当前行下方新开一行并进入插入模式。

4.2 保存与退出

  1. 保存更改 :完成文本编辑后,按 Esc 键回到正常模式。要保存所做的更改而不退出 Vim 编辑器,请输入 :w 并按回车键。

  2. 退出编辑器 :若要退出编辑器但不保存更改,请输入 :q! 并按回车键(注意这会丢弃所有未保存的更改)。如果希望保存更改并退出,则输入 :wq 或简写为 :x 并按回车键。

4.3 注意Rebase

  • 在成功保存并退出 Vim 编辑器后,根据您的操作,Git 可能会提示您继续 rebase 过程。这时,您需要运行 git rebase --continue 命令来完成整个 rebase 操作。此步骤可能需要重复多次,直到处理完所有的提交。

  • 重要的是,在执行 rebase 操作之前,请确保理解 rebase 对提交历史的影响,并确认它不会影响团队成员的工作流程。特别是当涉及到已推送至远程仓库的提交时,应格外小心,因为 rebase 会改变提交历史。


5. 合并多个commit

  1. 合并最近 n 个提交,运行:
bash 复制代码
     git rebase -i HEAD~n
  1. 编辑提交列表

    • 在打开的文本中,将你想要合并的所有提交前的pick改为squash或简写s,除了第一个提交保持pick不变。

      bash 复制代码
          pick abcdefg 提交信息1
          squash hijklmn 提交信息2
          squash opqrstu 提交信息3
  2. 保存并退出编辑器 (Vim为例:按Esc, 输入:wq, 按回车)。

  3. 编辑合并后的提交信息

    Git会再次打开编辑器让你编辑新的合并提交的信息。编辑后,再次保存并退出。

  4. 强制推送更新(如果已推送到远程仓库)

    bash 复制代码
    git push --force

强制推送会覆盖远程仓库的历史,所以如果其他人也在基于这些提交工作,可能会导致冲突。


问题一:Clone Github报错The TLS connection was non-properly terminated.

最近在服务器上跑代码,clone Github代码报错

bash 复制代码
GnuTLS recv error (-110): The TLS connection was non-properly terminated.

TLS握手

TLS(Transport Layer Security,传输层安全协议)握手是建立安全网络连接的关键步骤。在Git通过HTTPS协议与远程仓库通信时,TLS握手的主要目的是:验证服务器的身份,确保连接到的是合法的远程仓库;客户端和服务器协商生成会话密钥,用于后续的数据加密传输。

握手过程通常包括以下步骤:

  1. 客户端问候:客户端向服务器发送支持的TLS版本、加密算法等信息。
  2. 服务器问候:服务器选择一种加密算法,并返回自己的证书用于身份验证。
  3. 密钥交换:客户端和服务器根据选定的加密算法协商生成会话密钥。
  4. 完成握手:双方确认握手完成,开始使用会话密钥进行加密通信。

报错原因

当出现"gnutls_handshake() failed"错误时,说明在TLS握手过程中出现了问题,导致无法建立安全连接。以下是几种常见原因:

1.代理设置问题

如果之前设置了代理,但当前网络环境不需要代理,或者代理配置不正确,可能会干扰Git与远程仓库的直接通信,导致TLS握手失败。Git在尝试通过代理连接时,可能无法正确处理握手过程中的数据包,从而引发错误。

2. Git版本问题

旧版本的Git可能存在兼容性问题,导致与服务器的TLS握手出现异常。例如,某些版本的Git使用GnuTLS库进行加密传输,在特殊情况下(如使用了代理服务器)可能出现握手失败的问题。

3. SSL证书问题

本地SSL证书过期或不受信任,会导致服务器的SSL证书无法通过客户端的验证。这可能是由于证书颁发机构(CA)的证书未正确安装,或者证书本身存在问题。

解决

清除代理设置

清除Git的代理配置,使Git能够直接与远程仓库建立连接,避免代理设置导致的握手问题:

bash 复制代码
git config --global  --unset https.https://github.com.proxy
git config --global  --unset http.https://github.com.proxy

更新Git版本

更新Git到最新版本,以确保使用的是经过优化和修复的版本,避免因旧版本的兼容性问题导致握手失败。在Linux系统上,可以通过包管理器(如apt-get)更新Git。

我清除代理之后就OK了。

问题二:Failed to connect to 127.0.0.1 port 7890 after 2030 ms: Couldn't connect to server

bash 复制代码
git config --global --unset http.proxy
bash 复制代码
git config --global --unset https.proxy
相关推荐
神奇萝卜头3 小时前
Git基础面试题
git
Tipriest_8 小时前
github cli主要用途,优势,和git的区别
git·github·gh·github cli
ImangoCloud8 小时前
Git的windows开发与linux开发配置
linux·windows·git
杰哥技术分享12 小时前
git:The following paths are ignored by one of your
git
不爱学英文的码字机器15 小时前
[Git] 认识 Git 的三大区域 && 文件的修改和提交
git
不爱学英文的码字机器18 小时前
[Git] 基本操作及用户配置
大数据·git·elasticsearch
deepwater_zone1 天前
Linux下 使用 SSH 完成 Git 绑定 GitHub
linux·git·ssh
王了了哇1 天前
【关联git本地仓库,上传项目到github】
git·github
Sgq丶1 天前
Git 提交大文件 this exceeds GitHub‘s file size limit of 100.00 MB
git·github