git常见操作汇总

news2024/11/25 20:19:25

存档,方便本人查询~

除了add、commit、push、pull外有些操作也是需要掌握的~在复习之前先准备一下需要的项目:

mkdir git-demo1
cd git-demo1
git init

基础操作

# 在工作区新增一个README.md文件,并写入 # Hello World

# 查看哪些原件做了修改(或者未提交到本地仓库)
git status

# 将全部文件加入暂存区(也可以指定某个文件)
git add .

# 将暂存区域的文件提交到本地仓库
git commit -m "feat: add README.md"

# 添加远程仓库
git remote add origin https://xxx/git-demo.git

# 将本地仓库的修改推送到远程仓库(这里的前提是添加了远程仓库~)
git push -u origin "master"

分支管理

# 从当前分支新建分支并切换到该分支(master -> feature/test1)
git branch feature/test1

# 查看当前所在的分支(也会列出所有分支),现在在master分支
git branch

# 再次新建一个分支并【切换】到该分支(mater -> feature/test2)
git checkout -b feature/test2

# 查看当前所在的分支,现在在feature/test2分支
git branch

# 查看本地分支和远程分支
git branch -a

# 切换分支回到master
git checkout master

# 删除feature/test1分支(若当前在feature/test1分支,则无法删除所在分支)
git branch -D feature/test1


进阶操作

拉取代码git pull -p

# 现阶段有两个分支 master和feature/test2
git branch

# 切换到feature/test2分支并推送到远程仓库
git checkout feature/test2
git push --set-upstream origin feature/test2

git chekcout master
git checkout -b feature/test1
git push --set-upstream origin feature/test1

git checkout master
# 这时候我们的远程仓库有三个分支,先在网页上删除feature/test1
# 拉取远程仓库代码,当前的分支,并不会删除feature/test1
git pull
# 查看本地分支和远程分支
git branch -a
# 结果如下
# feature/test1
# feature/test2
# * master
# remotes/origin/feature/test1
# remotes/origin/feature/test2
# remotes/origin/master

# 如果我们在git pull -p的话,会发现同步了远程仓库删除操作
git pull -p
git branch -a
# 结果如下
# feature/test1
# feature/test2
# * master
# remotes/origin/feature/test2
# remotes/origin/master

在这里插入图片描述

在这里插入图片描述

暂存文件git stash

# 切换到 feature/test1分支
git checkout feature/test1
# 新增一个index.html文件,内容随意发挥
git add .
git commit -m "feat: add index.html"
git push

# 切换到 feature/test2分支
git checkout feature/test2
# 新增一个index2.html文件,内容随意发挥
git add .
git commit -m "feat: add index2.html"
git push


# 假设你现在还在feature/test2开发某个功能,需要临时切分支到feature/test1修复一些东西
# 如果这时候 git checkout feature/test1 是会报错的
# 因为你在feature/test2上的内容没有提交
# 这时候你可以选择提交代码,然后切换
# 如果你不想提交代码,又想要切分支的话,可以试试 git stash
git stash save "未完成的功能"
# 也可以直接
git stash 
# 这时候你就可以去test1开发啦,然后回到test2的时候执行

# 查看暂存的记录
git stash list
# stash@{0}: On test2: 未完成的功能

# 使用 git stash apply --index $num,它不会删除暂存记录
# 使用的是最新一次的暂存记录
git stash apply 
# 或者根据序号使用某次暂存,比如这次它是0
git stash apply --index 0
# 这时候的记录里就还有我们暂存的那一条

# 查看暂存的记录
git stash list

# 或者使用git stash pop 使用最近一次暂存的修改并删除
git stash pop
# 查看暂存的记录
git stash list
# 这时候的记录里就没有我们暂存的那一条了

撤销修改

# 如果我们修改了某个文件,且还没添加到暂存区,那么撤销的操作为:
git checkout -- index2.html
# 如果是多文件:
git checkout -- index2.html README.md

撤销git add之后的代码

# 在feature/test2我们修改了index2.html
git add .
# 如果想要撤销的话执行
git reset index2.html

撤销git commit之后的代码

撤销全部

# 先查看log
git log

# 这时候我有三条提交记录
# commit 0f46b36b4a6bc0082aa705f51897616d3d661daa (HEAD -> feature/test2)
# commit d598f45b535daf020f9eec9a152f494965f0eedc (origin/feature/test2)
# commit 500cd99aae50ff91b955b14099dbc9f6f2176e75

# 这时候我想回退到d598f45b535daf020f9eec9a152f494965f0eedc 那么可以使用
git reset --hard  d598f45b535daf020f9eec9a152f494965f0eedc

# 这样再次执行git log就只有两条记录了,且之前修改的代码已经不见了
# 如果你想更新远程代码 需要执行 git push -f

只撤销自己的

# 上述撤销操作 适用于一个人开发的时候,多人开发的时候是不行的
# 假设当前的记录是 你提交了(1),A提交了一次(2),你提交了(3),A提交了一次(4)
# 这时候如果你想删除3,如果执行git reset的话,那么4的记录也会被删除

# 先假装我是2个人开发
# 我在index1.html开发,A在index2.html开发
# 新增内容<p>我第一次开发</p>
git add .
git commit -m "feat: 我第一次开发"

# 新增内容<p> A第一次开发</p>
git add .
git commit -m "feat: A第一次开发"

# 新增内容<p>我第二次开发</p>
git add .
git commit -m "feat: 我第二次开发"

# 新增内容<p>A第二次开发</p>
git add .
git commit -m "feat: A第二次开发"

# 查看日志
git log
# 50c11d768673a0309fad28a2383b188ec19c13a7 feat: A第二次开发
# d3baef3ebeb198b9bbed89c071bc72fc71228010 feat: 我第二次开发
# 375a73f6900bc40967089e5e83f4d3a73d6e70e8 feat: A第一次开发
# f1ec3a4f803a6c6604245e33e8ec2bf2dc9b30cc feat: 我第一次开发

# 这时候我们想要删除自己的第二次开发,那么可以借助 git revert
git revert d3baef3ebeb198b9bbed89c071bc72fc71228010
# 也可以是 git revert d3baef3ebeb198b9bbed89c071bc72fc71228010 -m ”feat: revert xxx“
# 这时候你会发现 index1.html中的代码只有<p>我第一次开发</p>
# git log中会出现revert信息


# 实际情况中 git revert还是会有冲突的情况,请妥善处理~~

合并commit信息

实际开发过程中有时候会同个功能,修复N次,提交N次代码,每次commit都是"fix: 修复某些bug",借助git rebase可以合并它们:

# <p>修复第一次</p>
git add .
git commit -m "fix: 修复index.html"

# <p>修复第二次</p>
git add .
git commit -m "fix: 修复index.html"

# <p>修复第三次</p>
git add .
git commit -m "fix: 修复index.html"

# git log
# 05237ec91aa44ab78be1cc162c2739a6f1030181 fix: 修复index.html
# b1cd9f47598996e75730e63819fc09c933e45ec5 fix: 修复index.html
# bc8f437103fe7d126bd899025cca65bb44f8b496 fix: 修复index.html
# bcc524fd3e1655725ab12b29571386b85118f221 Revert "feat: 我第二次开发"
# commit f8a8f0ab9e1af8079bca372e8ed5e767a40b8a03  feat: A第二次开发

# 现在要将 Revert "feat: 我第二次开发" 之前的三次 fix: 修复index.html 合并
# 所以取 Revert "feat: 我第二次开发" 的commitid为基准
git rebase -i bcc524fd3e1655725ab12b29571386b85118f221

接下来会出现这样的节面:

pick bc8f437 fix: 修复index.html
pick b1cd9f4 fix: 修复index.html
pick 05237ec fix: 修复index.html

# Rebase bcc524f..05237ec onto bcc524f (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.

按下键盘上的insert进入编辑模式,然后对信息进行删除,最后结果为:

pick bc8f437 fix: 修复index.html

# Rebase bcc524f..05237ec onto bcc524f (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was
# .       specified). Use -c <commit> to reword the commit message.
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#

编辑完之后按下ESC键推出编辑模式,按下:wq+enter保存并退出,查看记录:

bc8f437103fe7d126bd899025cca65bb44f8b496 fix: 修复index.html
bcc524fd3e1655725ab12b29571386b85118f221 Revert "feat: 我第二次开发"

commit已经合并~

Sourcetree

如果不喜欢用命令行,就用Sourcetree把~

使用方法参考:git 可视化工具Sourcetree使用全攻略(包括各种git冲突解决)

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

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

相关文章

Java安全——安全管理器

Java安全 安全管理器 Java安全管理器是一个Java安全模型中的一个组件&#xff0c;主要的作用是提高Java应用程序的安全性。Java应用程序中的每个线程都会对安全管理器进行检查&#xff0c;在执行代码之前&#xff0c;会先经过安全管理器的核验&#xff0c;安全管理器根据代码来…

Flink SQL之Temporal Joins

1.Temporal Joins&#xff08;时态JOIN&#xff09; 时态表是一个随时间演变的表&#xff0c;在Flink中也称为动态表。 时态表中的行与一个或多个时态周期相关联&#xff0c;并且所有Flink表都是时态的&#xff08;动态的&#xff09;。时态表包含一个或多个版本化的表快照&a…

Oracle数据库中的包的介绍及示例

Oracle的包是一种封装存储过程&#xff0c;函数&#xff0c;变量和游标等代码对象的方法。包可以视为一组相关的程序单元&#xff0c;它们共享相同的命名空间和存储空间。包可以被看做是一个数据库程序库&#xff0c;它包含一个或多个程序单元&#xff0c;这些单元可以被视为一…

图片加载失败捕获上报及处理

图片加载失败捕获上报及处理 前端页面中加载最多的静态资源之一就是图片了&#xff0c;当出现图片加载失败时&#xff0c;非常影响用户体验。这时候我们就需要对图片是否成功加载进行判断&#xff0c;并对图片加载失败进行处理。 图片加载监听 单个捕获 HTML中的img标签可以…

vue 组件简单实例及传参交互

前言:vue 可以比较灵活的使用 html的片段&#xff0c;并将html的片段进行数据隔离&#xff0c;参数也可以互相传递&#xff0c;组件与组件之间也可以进行数据的交互 合理的使用组件可以避免重复代码或者很方便的调用第三方组件库 vue组件 简单实例组件传参实际应用父子组件交互…

SpringBoot2+Vue2实战(四)进行组件内容拆分及路由实现

一、拆分 新建包&#xff1a; Aside和Header都是组件 User为视图 Aside.vue&#xff1a; <template><el-menu :default-openeds"[1, 3]" style"min-height: 100%; overflow-x: hidden"background-color"rgb(48, 65, 86)"text-color…

I2C总线协议详解

I2C总线物理拓扑结构 I2C总线物理拓扑图 I2C 总线在物理连接上非常简单&#xff0c;分别由SDA(串行数据线)和SCL(串行时钟线)及上拉电阻组成。通信原理是通过对SCL和SDA线高低电平时序的控制&#xff0c;来 产生I2C总线协议所需要的信号进行数据的传递。在总线空闲状态时&#…

linux下使用pyqt5的QMediaPlayer制作简易播放器(存在进度条、前进、后退、暂停、打开、播放等操作)

目录 1. 问题2. 解决3. 效果 1. 问题 关于pyqt5的qmediaplayer模块制作简易播放器&#xff0c;网上很多博客都是win下的&#xff0c;放在linux系统会出问题&#xff1b;另外&#xff0c;部分博客缺少文件&#xff0c;无法直接使用。 参考博客《基于pyqt5的QMediaPlayer实现视…

android studio git使用

pull代码 我们从远程仓库拉取代码时&#xff0c;一般有下面的两个选项 当使用Android Studio拉取代码时&#xff0c;有两种常见的选项&#xff1a;合并&#xff08;merge&#xff09;传入的更改到当前分支和变基&#xff08;rebase&#xff09;。 合并&#xff08;Merge&…

【Django学习】(九)自定义校验器_单字段_多字段校验_模型序列化器类

之前学习了视图集里运用序列化器进行序列化和反序列化操作&#xff0c;定义序列化器类&#xff0c;需要继承Serializer基类或者Serializer的子类&#xff1b; 这次我们将学习如何自定义校验器、如何进行单字段或者多字段校验&#xff0c;最后初步使用模型序列化器 一、自定义…

OPPO手机无网络可支持3km通信,对讲机将被淘汰?

OPPO在2019世界移动通信大会即MWC上海发布了一项新技术&#xff0c;被称为“无网络通信技术”&#xff08;MeshTalk&#xff09;。这是OPPO自主研发的一项去中心化通讯技术&#xff0c;能够在没有蜂窝网络、Wi-Fi、蓝牙的情况下&#xff0c;实现3km内通讯。 无网通信技术 不过…

Java教程-Java异常抛出

在Java中&#xff0c;异常允许我们编写高质量的代码&#xff0c;可以在编译时检查错误而不是在运行时&#xff0c;并且我们可以创建自定义异常&#xff0c;使代码的恢复和调试更加容易。 Java的throw关键字 Java的throw关键字用于显式地抛出异常。 我们指定要抛出的异常对象。异…

华为breeze ideploy部署流程示例

https://www.cnblogs.com/withfeel/p/11640877.html 华为breeze ideploy部署流程示例

Canal对MySQL进行数据迁移

Canal简单介绍 贴个官方网址&#xff1a;阿里巴巴MySQL binlog 增量订阅&消费组件 架构图&#xff1a; 基于日志增量订阅和消费的业务包括 数据库镜像数据库实时备份索引构建和实时维护(拆分异构索引、倒排索引等)业务 cache 刷新带业务逻辑的增量数据处理 当前的 cana…

CSS知识点汇总(十一)--回流重绘

文章目录 怎么理解回流跟重绘&#xff1f;什么场景下会触发&#xff1f;1、回流和重绘是什么&#xff1f;2、如何触发回流和重绘3、如何避免回流和重绘的发生 怎么理解回流跟重绘&#xff1f;什么场景下会触发&#xff1f; 1、回流和重绘是什么&#xff1f; 在HTML中&#xf…

二十、socket套接字编程(二)——TCP

文章目录 一、TCP套接字接口&#xff08;一&#xff09;inet_aton &#xff08;和inet_addr一样&#xff0c;换一种方式而已&#xff09;&#xff08;二&#xff09;socket()&#xff08;三&#xff09;bind()&#xff08;四&#xff09;listen()&#xff08;五&#xff09;acc…

ASP.NET Core MVC -- 入门

先决条件&#xff08;开发配置二选一&#xff09;&#xff1a; 带有 ASP.NET 和 Web 开发工作负载的Visual Studio Visual Studio Code Visual Studio Code用于 Visual Studio Code 的 C#&#xff08;最新版本&#xff09;.NET 7.0 SDK 创建Web应用 visual studio ctrl F5 …

云原生之深入解析Kubernetes网络流量的流转路径

一、Kubernetes 网络要求 Kubernetes 网络模型定义了一组基本规则&#xff1a; 在不使用网络地址转换 (NAT) 的情况下&#xff0c;集群中的 Pod 能够与任意其他 Pod 进行通信&#xff1b; 在不使用网络地址转换 (NAT) 的情况下&#xff0c;在集群节点上运行的程序能与同一节点…

王道《计算机网络》思维导图汇总

第一章 1.1.1 概念与功能 1.1.2 组成与分类 1.1.3 标准化工作及相关组织 1.1.4 性能指标 速率 带宽 吞吐量 时延 时延带宽积 往返时延RTT 利用率 1.2.1 分层结构、协议、接口、服务 1.2.2 OSI参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 1.2.4 TCP/IP 参…

内核角度看IO模型

聊聊Netty那些事儿之从内核角度看IO模型 网络包接收流程 当网络数据帧通过网络传输到达网卡时&#xff0c;网卡会将网络数据帧通过DMA的方式放到环形缓冲区RingBuffer中。RingBuffer是网卡在启动的时候分配和初始化的环形缓冲队列。当RingBuffer满的时候&#xff0c;新来的数据…