git常见操作汇总

存档,方便本人查询~

除了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/test2git chekcout master
git checkout -b feature/test1
git push --set-upstream origin feature/test1git 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.hqwc.cn/news/1551.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实验篇(7.2) 17. 站对站安全隧道 - FortiGate作为SSL客户端(SSL) ❀ 远程访问

【简介】虽然常用的站到站的连接用的是IPsec VPN&#xff0c;但是在某些特殊情况下&#xff0c;UDP500或4500端口被阻断&#xff0c;IPsec VPN无法连接&#xff0c;那么还有其它办法实现站到站的连接吗&#xff1f;SSL VPN也可以的。 实验要求与环境 OldMei集团深圳总部部署了域…

c#调用c++ dll,Release版本内存访问错误

最近遇到个比较经典的案例&#xff0c;在c#中调用yara进行文件检测&#xff0c;yara是c编写的一个非常强大库&#xff0c;github有个大佬用c#对其进行了封装&#xff0c;使其能在跨平台下&#xff0c;只需编译yara的so或dll就能直接跑。但总是在Release版本下时不时就崩溃&…

全网独家--【图像色彩增强】方法梳理和问题分析

文章目录 图像增强图像色彩增强问题可视化比较 难点色彩空间大&#xff0c;难以准确表征&#xff1f;不同场景差异大&#xff0c;难以自适应&#xff1f;计算量大&#xff0c;但应用场景往往实时性要求高&#xff1f; 方法传统方法深度学习逐像素预测3D LUT模仿ISP 个人思考批判…

PDF怎么转图片?PDF转图片的方法分享!​

PDF怎么转图片呢&#xff1f;相信很多人都会觉得PDF的非常的好用&#xff0c;小编也是被身边很多朋友推荐过后用了这个软件。但很多人在使用的时候有疑问&#xff0c;比如说PDF如何转图片&#xff1f;这难倒不少人&#xff0c;那么今天这篇文章就带你解析PDF怎么转图片&#xf…

CSS知识点汇总(八)--Flexbox

1. flexbox&#xff08;弹性盒布局模型&#xff09;是什么&#xff0c;适用什么场景&#xff1f; 1. flexbox&#xff08;弹性盒布局模型&#xff09;是什么 Flexible Box 简称 flex&#xff0c;意为”弹性布局”&#xff0c;可以简便、完整、响应式地实现各种页面布局。采用…

docker 安装

CentOS Docker 安装 | 菜鸟教程 或者官网 docker安装要求&#xff1a; Docker要求CentOS系统的内核版本高于 3.10 &#xff0c;通过 uname -r 命令查看你当前的内核版本是否支持安账docker。 第二步 sudo yum update 在给yum打补丁的时候 中需要有一次y 确定 …

Maven下载安装及其配置

Maven下载安装及其配置 文章目录 Maven下载安装及其配置1、Maven介绍2、Maven下载安装2.1、最新2.2、旧版3.8 3、Maven环境配置3.1、配置3.2、验证3.3、 配置本地仓库 4、Maven使用4.1、Maven常用命令4.2、IDEA中的使用 1、Maven介绍 Maven 是一个流行的构建工具和依赖管理工具…

【单片机】STM32单片机,RTC实时时钟,STM32F103C8T6,程序,万年历,数字时钟

文章目录 基础介绍rtc.hrtc.cmain.c 基础介绍 我以STM32F103C8T6为例&#xff0c;但STM32F103的RTC是通用的&#xff0c;STM32F103C8T6有一个原理图&#xff1a; https://qq742971636.blog.csdn.net/article/details/131288390 用纽扣电池给VBAT供电&#xff08;要共地&…

分布式操作系统期末复习(辽宁大学王龙主讲)

目录 一、题目 1.1 简答题 1.2 综合题 二、题目答案 2.1 简答题目答案 2.2 综合题目答案 三、期末题型分值分布 3.2 题型和分值 一、题目 1.1 简答题 1什么是中间件 22.1&#xff08;22年期末考试第一题&#xff09; 2 什么是名称解析 3 描述一下客户和服务器之间使…

论文阅读 - SegFormer

文章目录 1 概述2 模型说明2.1 总体结构2.2 Hierarchical Transformer Encoder2.3 Lightweight All-MLP Decoder 3 SegFormer和SETR的比较参考资料 1 概述 图像分割任务和图像分类任务是非常相关的&#xff0c;前者是像素级别的分类&#xff0c;后者是图像级别的分类。基于分类…

第37节:cesium 下雪效果(含源码+视频)

结果示例: 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false"><!

【Vue2】Vant2上传文件使用formData方式,base64图片转Blob再转File上传

文章目录 前言一、base64转换为 Blob 对象的方法二、使用步骤1.引入工具类js2.编写formData上传方法3.api方法中的request代码 三、实际操作1.html代码2.js代码 总结 前言 vant2上传组件传送门 使用vant2组件中的uploader组件 <van-uploader v-model"fileList" …