git命令备忘录

devtools/2024/11/28 16:45:05/

1、git rebase

把某个分支的commit重新应用到另一个分支的基础上:

A0————A1————A2————A3————A4

                    \

                    B1————B2————B3

假如有两个分支A和B,在A1的变更提交到A分支后以此作为基准拉取B分支,此后A分支提交了A2、A3、A4变更,B分支发生了B1、B2、B3变更,当在B分支执行rebase时会把B1、B2、B3暂存(摘下),把B分支的基准移动到A3,B分支形成如下的提交记录:

A0————A1————A2————A3————A4————B1'————B2'————B3'

实操: 

1)在master分支新建a、b、c三个文件,在master分支对a文件更新2次:

ce9e5a474fe34af9ba4fec76f10a2dd2.png

2)拉取新分支featur-b,并对b文件更新3次:

a8c78f53a46f4b75a454d0029ef89848.png 3)在master分支上,对c文件更新3次:

6332c48925694f2fa4e218b26e78a573.png 

 

4)形成如下的提交记录:

e55d5d5e86db42b3abd133e77f7e1ae6.png

 5)执行rebase:

# 切换到feature-b
git checkout feature-b# 把feature-b的变基到master分支上
git rebase master# 变基操作推送到远程分支
git push origin feature-b --force

 6)变基操作完成后feature-b分支的提交记录变成如下,变基后B1、B2、B3的commit的hash发生变更,与第4节的不一样,形成了B1‘、B2’、B3‘的提交记录:

0568b15c940a44ce9bd598d77e0dd215.png

7)git rebase过程中遇到冲突,需要先解决冲突,再通过命令git add .标记解决冲突,然后再继续rebase操作

git rebase --continue

 

8)如果希望停止rebase,可以通过命令取消rebase进程

git rebase --abort

2.删除分支

删除本地分支

git branch -D [branch_name

删除远程分支

git branch --delete [branch_name]

 

3. 分支打标签

git tag [tag_name]

推送标签至远程

git push origin [tag_name]

 

4.git stash暂存

1)暂存代码:当前分支的代码不想提交时,可以通过stash进行暂存:

git stash save 暂存描述

2)查看暂存记录

git stash list

 

3)应用暂存的代码到当前分支

#恢复索引为0的暂存记录

git stash apply 0

 

4)删除暂存的代码

#删除指定索引的暂存记录

git stash drop 0

 

5. git restore

当文件修改后,想撤销改动,可以通过git checkout [file-name]来还原代码,或者git restore [file-name]还原代码,或者git restore .来还原所有代码

当文件修改后,通过git add [file-name]添加到了暂存区

#还原指定文件

git checkout [file-name]

#还原指定文件

git restore [file-name]

#还原更改的文件

git restore .

#暂存所有代码

git add [file-name]

此时需要通过git restore --stage [file-name]撤销暂存

#把提交到暂存区的变更还原至未提交状态

git restore --stage [file-name]

此时无法通过git checkout来还原代码,需要通过git reset还原代码

 

6. cherry-pick

把其他分支的commit应用到当前分支

git cherry-pick [hash1 hash2.......]

 

 


http://www.ppmy.cn/devtools/137708.html

相关文章

VsCode 插件推荐(个人常用)

VsCode 插件推荐(个人常用)

pgadmin安装后运行不能启动界面的问题

在本人机器上安装了pgsql10后,自带的pgadmin安装后运行时能打开edge并显示数据库server和数据库的,后来又安装了pgsql17,结果安装后想打开pgadmin,结果一直在等待最后,爆出类似于下面的错误。 pgAdmin Runtime Enviro…

Qt中CMakeLists.txt解释大全

‌Qt从Qt5.15版本开始正式推荐使用CMake进行项目管理‌。 在Qt 5.15之前,虽然可以使用CMake进行构建,但Qt官方更推荐使用qmake。 然而,从Qt5.15开始,Qt官方正式推荐使用CMake作为主要的构建系统,并在Qt 6中进一步加强了…

随手记:鼠标触顶方法

// 鼠标触顶方法 scrollMethod() { window.onscroll () > { let t document.documentElement.scrollTop || document.body.scrollTop; if(t > 10) { this.positionStyle.top 0px; }else{ this.positionStyle.top 128px; } } },

【前端学习笔记】ES6 新特性

ES 新特性 1.let、const关键字var、let、const的区别? 2.变量的解构赋值3.新增Symbol4.模板字符串字符串新方法 5.rest参数6.运算符spread 扩展运算符可选链 ?.函数绑定运算符::指数运算符 ** 7.对象Object对象简写新增Map新增Set数组新方法object新方法 8.函数参数…

聊聊Flink:这次把Flink的触发器(Trigger)、移除器(Evictor)讲透

一、触发器(Trigger) Trigger 决定了一个窗口(由 window assigner 定义)何时可以被 window function 处理。 每个 WindowAssigner 都有一个默认的 Trigger。 如果默认 trigger 无法满足你的需要,你可以在 trigger(…) 调用中指定自定义的 tr…

wp the_posts_pagination 与分类页面搭配使用

<ul> <?php while( have_posts() ) : the_post(); <li > <a href"<?php the_permalink(); ?>"> <?php xizhitbu_get_thumbnail(thumb-pro); ?> </a> <p > <a href&q…

qt学习:button上叠加label进行文字滚动

步骤 定义一个继承QLabel的ScrollingLabel类在所需的界面类ui上定义一个button&#xff0c;定义全局变量运用 scrollinglabel.h #ifndef SCROLLINGLABEL_H #define SCROLLINGLABEL_H#include <QLabel> #include <QPushButton> #include <QLabel> #include…