【Git基础】常用git命令(三)

news2024/12/23 13:16:39

文章目录

    • 1.版本回退
      • 1.1 没有commit的情况
      • 1.2 已经commit但没有push的情况
      • 1.3 已经push到远端仓库的情况
    • 2. 删除文件
      • 2.1 从工作区删除文件
      • 2.2 使用git rm命令删除文件
      • 2.3 永久删除文件
      • 2.4 永久删除文件的步骤拆解
    • 3. 查看指定文件的修改
      • 3.1 查看文件的所有commit
      • 3.2 查看所有commit的修改内容
      • 3.3 查看某个commit里的修改
      • 3.4 查看本地修改的差异
      • 3.5 与某个commit做比较
      • 3.6 两个commit之间的差异
    • 4. 多个客户端之间的同步
      • 4.1 本地化方式
      • 4.2 中心化方式

1.版本回退

1.1 没有commit的情况

如果你还没有进行 commit,那么可以通过git checkout或者git restore命令来回退。

例如,如果你想撤销对 file1.txt 的更改,可以使用以下命令:

git checkout -- file1.txt

或者使用git restore命令:

git restore file1.txt

如果你想撤销对所有文件的更改,可以使用:

git checkout -- .

或者:

git restore .

1.2 已经commit但没有push的情况

如果你已经进行了 commit,但还没有 push,那么可以通过git resetgit revert命令来回退。

使用git reset命令回退到上一个 commit:

git reset HEAD~1

这将把 HEAD 指针移动到上一个 commit,并将更改放回到工作目录。你可以使用--soft--mixed--hard选项来指定回退方式。默认情况下,git reset使用--mixed模式。

使用git revert创建一个新的 commit,以撤销指定的 commit:

git revert HEAD

这将创建一个新的 commit,以撤销最近的 commit。你也可以使用 commit 的哈希值或者其他引用来指定要撤销的 commit。

1.3 已经push到远端仓库的情况

如果你已经进行了 push,那么回退的过程将涉及到远程仓库。首先,你需要使用git resetgit revert进行本地回退,然后再强制推送到远程仓库。

使用git reset回退到上一个 commit 并强制推送:

git reset HEAD~1
git push -f origin <branch_name>

使用git revert创建一个新的 commit,以撤销指定的 commit,并推送:

git revert HEAD
git push origin <branch_name>

需要注意的是,强制推送可能会导致其他人在远程仓库中丢失提交,所以在团队协作中要慎重使用。

2. 删除文件

2.1 从工作区删除文件

  • 首先,在工作区删除文件。例如,在命令行中,输入以下命令:
    rm 文件名.txt
    
    将“文件名.txt”替换为要删除的文件名。
  • 然后,将删除操作添加到暂存区(staging area):
    git add 文件名.txt
    
    同样,将“文件名.txt”替换为要删除的文件名。
  • 提交更改:
    git commit -m "删除了文件名.txt"
    
    将“删除了文件名.txt”替换为适当的提交信息。

2.2 使用git rm命令删除文件

  • 使用git rm命令删除文件。例如,输入以下命令:

    git rm 文件名.txt
    

    将“文件名.txt”替换为要删除的文件名。

    这将从工作区和暂存区中删除文件。

  • 提交更改:

    git commit -m "删除了文件名.txt"
    

    将“删除了文件名.txt”替换为适当的提交信息。

在这两种方法中,使用git rm命令更简单,因为它直接从工作区和暂存区中删除文件,无需手动执行git add命令。注意,在删除文件后,确保提交更改,以便将更改更新到版本历史中。

2.3 永久删除文件

我们有的时候可能会不小心上传了一些无用的文件,尤其是我们使用C和C++的开发者,一不小心上传很多编译的中间文件,当然这个操作是可以通过.gitignore来避免的。但还是有的时候可能是上传了一个秘钥文件,这样关键的东西一般是很保密的,一般开发人员不应该能看到这样的秘钥文件。已经commit且push到远程仓库了,该怎么把它给删除呢?而且记录里也不应该存在,比如我们要永久删除secret.cert:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch secret.cert' --prune-empty --tag-name-filter cat -- --all

git push origin master --force

也可以删除文件夹,只需要将secret.cert替换成文件夹,在rm后添加-r参数在这里插入图片描述

2.4 永久删除文件的步骤拆解

  • 使用git log查找要删除文件的提交哈希(commit hash):

    git log --pretty=oneline -- 文件名.txt
    

    将“文件名.txt”替换为要删除的文件名。从输出中找到最早的提交哈希。

  • 使用git rebase命令交互式地删除该文件:

    git rebase -i 提交哈希^
    

    将“提交哈希”替换为步骤1中找到的哈希值。注意,后面要加上脱字符(^),表示哈希的前一个提交。

    这将打开一个文本编辑器,显示要编辑的提交列表。

  • 在文本编辑器中,找到要删除文件的那一行,将该行开头的pick更改为edit,然后保存并关闭文件。

  • 现在,你位于要删除文件的提交状态。从此提交中删除文件:

    git rm --cached 文件名.txt
    

    将“文件名.txt”替换为要删除的文件名。

  • 使用git commit --amend命令重新提交更改:

    git commit --amend
    

    这将重新提交该更改,并删除文件。

  • 使用git rebase --continue继续重写剩余的历史记录:

    git rebase --continue
    
  • 最后,将更改推送到远程仓库:

    git push --force
    

    注意,使用--force选项会覆盖远程仓库的历史记录。这可能会影响其他团队成员,因此在执行此操作之前,请确保与团队成员进行沟通。

经过上述步骤,文件将被永久删除,并且Git历史中不再包含有关该文件的记录。但是,这种操作具有一定风险,请谨慎操作。

3. 查看指定文件的修改

3.1 查看文件的所有commit

git log --oneline [filename]

显示文件的所有修改记录
在这里插入图片描述

3.2 查看所有commit的修改内容

git log -p [filename]

显示所有commit的修改
在这里插入图片描述

3.3 查看某个commit里的修改

git show [commit_id] [filename]

显示某个commit里文件的修改
在这里插入图片描述

3.4 查看本地修改的差异

git diff [filename]

查看本地对某个文件做了哪些具体的修改
在这里插入图片描述

3.5 与某个commit做比较

git diff [commit_id] [filename]

显示与某个commit间所有的差异,commit-id可以替换成HEAD,比如HEAD~2
在这里插入图片描述

3.6 两个commit之间的差异

git diff [commit_id1] [commit_id2]

显示两个commit所有差异
在这里插入图片描述

4. 多个客户端之间的同步

4.1 本地化方式

如果我们期望同事之间去互相pull和push代码,可以使用如下方式:

  1. 在每个参与者的电脑上,找到本地Git仓库的文件夹。在该文件夹中,执行以下命令,以启动一个Git服务:

    git daemon --reuseaddr --base-path=. --export-all --verbose
    

    这个命令将启动一个Git服务,允许其他参与者访问本地仓库。

  2. 获取每个参与者的IP地址,确保它们位于同一个局域网或VPN环境下。

  3. 在每个参与者的电脑上,将其他参与者的仓库添加为远程仓库。例如,假设同事A的IP地址是192.168.1.2,那么在同事B的电脑上,执行以下命令:

    git remote add colleagueA git://192.168.1.2/项目文件夹名称
    

    这将同事A的仓库添加为远程仓库。请根据实际情况替换IP地址和项目文件夹名称。

  4. 当需要从其他同事处获取代码更新时,使用以下命令:

    git fetch colleagueA 分支名称
    git merge colleagueA/分支名称
    

    这两个命令将从同事A的仓库获取更新,并合并到当前分支。请根据实际情况替换分支名称。

  5. 当需要将代码推送给其他同事时,首先确保对方已经将你的仓库添加为远程仓库。然后,使用以下命令:

    git push colleagueA 分支名称
    

    这个命令将把你的分支推送到同事A的仓库。请根据实际情况替换分支名称。

注意:这种方法需要每个参与者的电脑都运行Git服务,并且互相之间可以访问。如果出现网络问题,可能导致同步失败。而且这种方法没有中心化的服务器来管理版本历史,可能在协作过程中出现冲突。因此,推荐在实际应用中使用中心化的Git服务器来进行同步。

4.2 中心化方式

还通过一个中心化的Git服务器(如GitHub、GitLab等)作为中转站来实现。下面是一些基本步骤:

  1. 创建一个远程仓库:首先,你需要在一个Git服务器上创建一个远程仓库。这可以是GitHub、GitLab、Bitbucket等。创建远程仓库后,通常会得到一个URL,用于访问该仓库。

  2. 添加远程仓库:在本地仓库中,你需要将远程仓库添加为一个“远程”(remote)。在终端中输入以下命令:

    git remote add origin 远程仓库的URL
    

    这里的"origin"是远程仓库的别名,你可以根据需要更改。

  3. 推送本地仓库内容到远程仓库:使用以下命令将本地仓库的内容推送到远程仓库:

    git push -u origin master
    

    这会将本地的"master"分支推送到远程仓库的"master"分支。如果你使用的是其他分支,将"master"替换为相应的分支名。

  4. 其他客户端克隆远程仓库:在其他客户端上,你需要先克隆远程仓库。使用以下命令:

    git clone 远程仓库的URL
    

    这会将远程仓库克隆到本地,并自动设置"origin"远程。

  5. 拉取更新:当其他客户端对远程仓库进行了更改并推送后,你可以使用以下命令将最新更改拉取到本地:

    git pull origin master
    

    同样,如果使用的是其他分支,请将"master"替换为相应的分支名。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/450711.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚控组态王与EXCEL通信

先创建一个IO设备&#xff1a;DDE类型 创建一个变量&#xff1a; 创建一个窗口&#xff0c;建立一个文本显示并关联前面建立的变量 先打开一个EXCEL文件&#xff08;注意&#xff1a;WPS是不兼容的&#xff0c;必须先打开EXCEL文件&#xff0c;否则会报错&#xff09; …

云原生|kubernetes|rancher-2.6.4安装部署简明手册

前言: rancher是一个比较特殊的开源的kubernetes管理工具&#xff0c;特殊在它是一个名称为k3s的简单kubernetes集群&#xff0c;而该集群是在kubernetes集群内的。 OK&#xff0c;本文将讲述如何在centos7服务器上&#xff0c;在已有的kubernetes-1.23.15集群内&#xff0c;…

基于STM32的电阻、电容测量(NE555芯片RC振荡法)

文章目录 前言一、电路图1.电阻测量公式2.电容测量公式 二、代码实现1.外部中断代码2.定时器中断处理数据 总结 前言 做的一个关于电阻和电容的测量电路&#xff0c;都是比较通用的。经过实际测试&#xff0c;电容测量电路还是可以的&#xff0c;电阻测量电路有一个缺点就是&a…

Prometheus/Metrics监控dubbo线程池状态

网上找了些文章&#xff0c;发现挺少的&#xff0c;下面一些文章有些帮助 https://cloud.tencent.com/developer/article/1800906 https://github.com/apache/dubbo/issues/6625 其中第二篇文有写到&#xff0c;通过dubbo的spi获取DataStore&#xff0c;然后再拿到dubbo的线程…

关于jvm-sandbox-repeater dubbo回放异常的问题处理

还是引流回放的问题&#xff0c;今天测试的同学反馈说他做了流量回放&#xff0c;但是回放的好几个接口报错了&#xff0c;都是抛出来的服务器错误&#xff0c;请联系管理员&#xff0c;与预期的结果不符&#xff0c;但是实际这块的逻辑是没有改动的&#xff0c;所以也只能是du…

Ingonyama团队的ZKP加速

1. PipeMSM&#xff08;cloud-ZK&#xff09;&#xff1a;ZKPFPGA Ingonyama团队2022年发表了论文《PipeMSM: Hardware Acceleration for Multi-Scalar Multiplication》&#xff0c;尝试将ZK操作与FPGA结合&#xff0c;并为未来ZK与ASIC&#xff08;Application Specific Int…

无法解析的外部符号 __mingw_vsprintf

windows下的ffmpeg是采取mingw平台上编译&#xff0c;本人采用的是msys2&#xff0c;本人需要h264&#xff0c;于是先在msys2里面编译了x264静态库&#xff0c;注意这里是静态库&#xff0c;动态库经过了链接&#xff0c;不会出现下面的问题&#xff0c;然后在ffmpeg里面用下面…

【C++类】

目录 前言类的定义类的访问限定符及封装访问限定符封装 类的大小为什么需要内存对齐为什么成员函数不占用类的内存&#xff1f;为什么空类的大小是1个字节&#xff1f; 前言 今天是少年正式认识"对象"的第一天,虽然此"对象"非彼对象&#xff0c;但是少年也…

使用Jmeter进行http接口测试

前言&#xff1a; 本文主要针对http接口进行测试&#xff0c;使用Jmeter工具实现。 Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。 一、开发接口…

经典算法之快速排序

快速排序 【思想】选择一个元素作为标准&#xff0c;分别将小于该元素的元素放入该元素左边&#xff0c;大于该元素的元素放到该元素的右边&#xff0c;接下来分别对左右两边区间进行同样操作&#xff0c;直到整个数组有序。 【例子】 上述是一个未排序的数组&#xff0c;首…

前端三个小妙招

整理下本人在工作中撸代码遇到的一些刚看时一脸懵逼&#xff0c;实则很简单就能解决的小妙招&#xff0c;希望对大家有所帮助哟~ 伪元素动态改变其样式 我们都用过伪元素&#xff0c;什么::before,::after啊这些等等&#xff0c;但是他们都不会直接在代码里html中生成标签&am…

使用MASA全家桶从零开始搭建IoT平台(一)环境准备

前言 本系列文章以IoT开发小白的角度&#xff0c;从零开始使用.Net为主要技术搭建一个简单的IoT平台&#xff0c;由于是入门系列&#xff0c;所有代码以围绕IoT基础业务场景为主&#xff0c;不会涉及DDD等设计思想。 架构图 这里是我们整个IoT平台的架构图。 一、设备接入…

深入了解Synchronized同步锁的优化

大家好&#xff0c;我是易安&#xff01;今天我们来聊一下Synchronized同步锁的优化。 在并发编程中&#xff0c;多个线程访问同一个共享资源时&#xff0c;我们必须考虑如何维护数据的原子性。 在JDK1.5之前&#xff0c;Java是依靠Synchronized关键字实现锁功能来做到这点的。…

Java核心技术 卷1-总结-10

Java核心技术 卷1-总结-10 通配符类型通配符概念通配符的超类型限定无限定通配符通配符捕获 通配符类型 通配符概念 通配符类型中&#xff0c;允许类型参数变化。 例如&#xff0c;通配符类型Pair<? extends Employee>表示任何泛型Pair类型&#xff0c;它的类型参数是…

LeetCode_动态规划_中等_1105.填充书架

目录 1.题目2.思路3.代码实现&#xff08;Java&#xff09; 1.题目 给定一个数组 books &#xff0c;其中 books[i] [thicknessi, heighti] 表示第 i 本书的厚度和高度。你也会得到一个整数 shelfWidth。 按顺序将这些书摆放到总宽度为 shelfWidth 的书架上。 先选几本书放…

机器学习基本模型与算法在线实验闯关

机器学习基本模型与算法在线实验闯关 文章目录 机器学习基本模型与算法在线实验闯关一、缺失值填充二、数据标准化三、支持向量机分类模型及其应用四、逻辑回归模型及其应用五、神经网络分类模型及其应用六、线性回归模型及其应用七、神经网络回归模型及其应用八、支持向量机回…

AIGC跨过奇点时刻,亚马逊云科技展露新峥嵘

AIGC是云计算的Game changer&#xff0c;将从根本上改变云计算乃至整个科技行业的游戏规则&#xff0c;作为云计算行业的Game Rulemaker&#xff0c;亚马逊云科技也展露出新的峥嵘。4月13日&#xff0c;亚马逊云科技宣布推出生成式AI新工具&#xff0c;包括Amazon Bedrock和Ama…

Java核心技术 卷1-总结-11

Java核心技术 卷1-总结-11 Java 集合框架将集合的接口与实现分离Collection接口迭代器泛型实用方法集合框架中的接口 Java 集合框架 将集合的接口与实现分离 Java集合类库将接口&#xff08;interface&#xff09;与实现&#xff08;implementation&#xff09;分离。 例如队…

把Windows装进内存条里,提前感受超越PCIe 6.0固态的顶级体验

这两年电脑内存条是越来越白菜价了&#xff0c;看到大伙儿慢慢富足起来的内存容量&#xff0c;小忆是由衷地感到高兴。 不过话说&#xff0c;动不动 32G、64G 内存你真能用得完吗&#xff1f;为了榨干大家真金白银买来的空闲内存价值。 咱这期整个骚操作——将 Windows 11 系统…

虚拟机安装linux系统centos(保姆级)

虚拟机安装linux系统centos 1.软硬件准备2.虚拟机准备1.打开VMware选择新建虚拟机2.典型安装与自定义安装3.虚拟机兼容性选择4.选择稍后安装操作系统5.操作系统的选择7.处理器与内存的分配8.网络连接类型的选择&#xff0c;网络连接类型一共有桥接、NAT、仅主机和不联网四种。9…