git : 从入门到实战进阶

news2024/7/4 0:25:24

目录

0. 前言

1. git stash: 暂时保存本地修改

2. git push时发生冲突怎么办?

3. 访问过去的提交版本:git checkout

3.1 detached HEAD

3.2 “detached HEAD”状态下所作的修改会怎样呢?

3.3 “detached HEAD”状态下所作的修改如何汇入开发branch? 

4. 取消或恢复

4.1 git reset

4.2 git revert

4.3 git checkout

5. 创建bare repository


0. 前言

        记录日常git使用过程中碰到的一些常见问题的解决,以及一些常用技巧。作为自己作为git使用者的从入门到进阶的成长过程。不求完备但求简洁实用。动态更新。。。

1. git stash: 暂时保存本地修改

        多人工作的项目中,经常会碰到自己在本地做了一些修改(但是还没有经过验证,没有做好要提交的准备),这个远程库已经有更新,需要pull下来在这个最新版本基础上进行自己的修改的验证。这时,pull一下的话会碰到以下这种错误:

        简而言之,就是因为本地有修改而且还没有commit(not yet being staged),所以git不允许你pull远程最新版本,因为它不知道该拿你本地修改的东西与远程版本中的更新怎么办。如果你本地commit了话,那么git会在pull时自动进行merge,如果merge时发生冲突,会在merge版本中留下标志。但是你本地修改没有commit,git就不知道该咋办了,干脆报警撂挑子不干了。

        简单的对策(三板斧):

git stash

git pull 

git stash pop

        第一条命令是将本地修改暂时保存起来,这样本地版本就回到上一次pull下来的状态。这样的话,再执行第1条git pull命令就不存在冲突了。然后,第3条指令的意思是重新把刚才暂存起来的本地修改弹(pop)出来,再次patch到最新pull下来的最新版本上去。

        那怎么确保在以上操作过程中自己原本所做的修改没有丢失呢?

        在以上操作过程之前执行一下“git status”,然后在以上操作过程后再执行一次git status,两次git status所得到的结果应该一致,即应该都列举了本地修改过的文件有哪些。当然,更保险的做法是手动备份自己所作的本地修改,然后在执行以上操作之后,用diff进行手动备份文件与本地库中的文件确认自己所作的修改是否还在。

        关于git stash的更全面的解说参见:git stash - Saving Changes | Atlassian Git Tutorial

2. git push时发生冲突怎么办?

        执行git push时常常会碰到以下错误:

         这是因为在你git pull之后在本地做了修改到现在要push上去的期间内,有其他人对远程git库做了修改。

        最简单的解决方案就是,先执行“git pull”,将远程库的更新拉下来。这时由于本地的更新已经commit了,git在pull时会自动执行远程更新与本地更新的merge。

        如果本地更新与远程更新没有冲突,比如说,没有针对相同的文件进行更新,那就只是平凡的merge,大家相安无事,执行完git pull后再次执行git push即可。

        如果本地更新与远程更新存在冲突呢?。。。且听下回分解。

3. 访问过去的提交版本:git checkout

        当想要访问既往历史版本时,可以使用git checkout命令。开发过程中经常会需要追溯历史版本去查找某个功能问题是从哪个历史版本开始导入的。

git checkout commit-id

        这条命令会切换指定的commit-id。而commit-id可以用用git log命令进行查询,比如说:

git log

git log --oneline

        --oneline选项是给出简洁的输出,将信息压缩到一行中输出。 

        执行以上命令后,就可以在恢复的该commit版本上做验证、修改等操作,这些操作仅对该commit有效,不会影响其它branch,比如说开发工作所在的主branch(main or master等)。

3.1 detached HEAD

        通常来说,HEAD会指向某个branch。但是,当执行git checkout后,HEAD就不再指向任何branch,而是仅指向该commit。这就是所谓的“detached HEAD”状态,或者说游离状态。

        在这个状态下,所作的修改无法提交到各开发branch中去。

        要想从这个游离状态返回到开发状态(比如说进入该游离状态之前的branch)去,直接执行以下命令即可:

git checkout <branch-name>       # 切换到某指定branch

        比如说,如果是从main or master branch进入该游离状态的话,则可以执行以下命令回去:

git checkout main 

3.2 “detached HEAD”状态下所作的修改会怎样呢?

        coming soon...

3.3 “detached HEAD”状态下所作的修改如何汇入开发branch? 

        coming soon...

        git checkout命令还有以下一些使用方式:

git checkout -b <branch-name>  # 创建新的branch并切换到该branch

git checkout -- <file>                    # 放弃对指定文件的本地修改,恢复到本地版本库中的状态

4. 取消或恢复

4.1 git reset

4.2 git revert

4.3 git checkout

5. 创建bare repository

        --> git: Linux中创建中心仓库(or 裸仓库:bare repository)

        

ref: Git Tutorials and Training | Atlassian Git Tutorial

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

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

相关文章

leetcode100.相同的树

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;相同的树 1️⃣ 代码&#xff1a; bool isSameTree(struct TreeNode* p, struct TreeNode* q){// 判断两棵树当前结点是否为空if (p NULL && q NULL) {// 说明是相同的return true;}// 来到这里有几种情况// …

causal-learn ModuleNotFoundError: No module named ‘pygam‘

调用 causallearn 库包&#xff0c;测试CAM-UV算法时报错&#xff1a; No module named pygam 解决方法&#xff1a; pip install pygam 参考链接&#xff1a; 【Python Causal Learning Toolbox】causallearn 库包的使用、报错修改_板砖板砖我是兔子的博客-CSDN博客

java ArratList深拷贝

引用深拷贝 便捷方法 class Test {public static void main(String[] args) {ArrayList<User> list new ArrayList<>();for (int i 0; i < 3; i) {User user new User(i, "name" i);list.add(user);}ArrayList<User> list1 new ArrayList…

超细致的性能测试流程,你get了吗?

性能测试&#xff1a;利用工具模拟大量用户操作&#xff0c;验证系统承受的负载情况。 性能测试的目的&#xff1a;找到潜在的性能问题或瓶颈&#xff0c;分析并解决&#xff1b;找出性能变化趋势&#xff0c;为后续扩展系统提供参考。测试监控&#xff1a;基准测试、配置测试…

【JavaEE】DI与DL的介绍-Spring项目的创建-Bean对象的存储与获取

Spring的开发要点总结 文章目录 【JavaEE】Spring的开发要点总结&#xff08;1&#xff09;1. DI 和 DL1.1 DI 依赖注入1.2 DL 依赖查询1.3 DI 与 DL的区别1.4 IoC 与 DI/DL 的区别 2. Spring项目的创建2.1 创建Maven项目2.2 设置国内源2.2.1 勾选2.2.2 删除本地jar包2.2.3 re…

(栈队列堆) 剑指 Offer 31. 栈的压入、弹出序列 ——【Leetcode每日一题】

❓ 剑指 Offer 31. 栈的压入、弹出序列 难度&#xff1a;中等 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序…

好的CRM需要有哪些特点?

CRM客户管理系统在企业中占有举足轻重的地位&#xff0c;既是战略工具又可以强化部门间的团队协作、优化销售流程、缩短销售周期。市面上crm做得比较好的公司有哪些&#xff1f; 1.上榜Gartner魔力象限 好的CRM市场的引领、产品研发的持续投入、技术创新以及不断增长的市场份…

面试题 02.07. 链表相交

给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回结果后&#x…

划片机的作用将晶圆分割成独立的芯片

划片机是将晶圆分割成独立芯片的关键设备之一。在半导体制造过程中&#xff0c;晶圆划片机用于将整个晶圆切割成单个的芯片&#xff0c;这个过程被称为“晶圆分割”或“晶圆切割”。 晶圆划片机通常采用精密的机械传动系统、高精度的切割刀具和先进的控制系统&#xff0c;以确保…

Kafka - AR 、ISR、OSR,以及HW和LEO之间的关系

文章目录 引子举例说明 引子 AR&#xff08;Assigned Replication&#xff09;&#xff1a; 分区中的所有副本统称为AR&#xff08;Assigned Replicas&#xff09; ISR&#xff08;In-Sync Replicas&#xff09;&#xff1a;同步副本集合 ISR是指当前与主副本保持同步的副本集合…

JavaSwing+MySQL的酒店管理系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88063706?spm1001.2014.3001.5503 JDK1.8、MySQL5.7 功能&#xff1a;散客开单&#xff1a;完成散客的开单&#xff0c;可一次最多开5间相同类型的房间。 2、团体开单&#xff1a;完成团体…

找不到类NoClassDefFoundError: ionetty.util.intemnal.Platformlependent0

解决方案&#xff0c;jdk版本的问题&#xff0c;在project structure 中把项目jdk改为1.8

[GXYCTF2019]simple CPP

前言 三个加密区域&#xff0c;第一次是基本运算&#xff0c;八位叠加&#xff0c;z3方程 分析 第一轮加密&#xff0c;和Dst中模27异或 &#xff08;出题人对动调有很大意见呢&#xff09; 将输入的字符串按八位存入寄存器中&#xff0c;然后将寄存器内容转存到内存 第一次…

Tauri自带命令生成各平台图标

npm命令&#xff1a; npm run tauri icon yarn命令&#xff1a; yarn tauri icon 1.在项目根目录中放置一个app-icon.png (图片)文件: 图片最好长宽比是1:1&#xff1a;(其他好像会报错) 2.执行命令: npm run tauri icon 可以到文件里面查看 如果本地测试&#xff0c;图标…

记一次真实MySQL百万数据优化

证实下确实是150万+数据哈 原SQL 原SQL执行计划 原SQL执行时间 5秒左右 原SQL分析 思路来源 整体看下SQL好像没啥可优化的。那咱们就大错特错了。 可能有人会说B表为啥在A表后面不正常呀,因为这是内连接查询不是左右连接查询。A,B表的顺序是可以交换的(实测无影响) 首先我们…

leetcode97. 交错字符串(算法:动态规划)

题目&#xff1a; 给定三个字符串 s1、s2、s3&#xff0c;请你帮忙验证 s3 是否是由 s1 和 s2 交错 组成的。 两个字符串 s 和 t 交错 的定义与过程如下&#xff0c;其中每个字符串都会被分割成若干 非空 子字符串&#xff1a; s s1 s2 ... sn t t1 t2 ... tm |n - …

Spring Batch之读数据库—StoredProcedureItemReader(四十)

一、StoredProcedureItemReader Spring Batch框架对存储过程提供了支持&#xff0c;StoredProcedureItemReader提供了对存储过程的支持&#xff0c;其运行和JdbcCursorItemReader类似&#xff0c;均是获取游标对象&#xff0c;然后转换为JavaBean对象。 StoredProcedureItemRe…

js - 关于ES6 Module模块化的跨域报错

ES6 在语言标准的层面上&#xff0c;实现了模块功能&#xff0c;而且实现得相当简单&#xff0c;旨在成为浏览器和服务器通用的模块解决方案。其模块功能主要由两个命令构成&#xff1a;export或export default和import。export命令用于规定模块的对外接口&#xff0c;import命…

WPF 搜索框控件样式

WPF 搜索框控件样式 完全通过Xaml代码实现&#xff0c;使用了UserControl进行封装。功能包括聚焦时控件展开&#xff0c;输入为空时的文字提示&#xff0c;以及待选提示项列表等效果。实现效果如下图&#xff1a; xaml代码 <UserControl x:Class"SearchBar.SearchBo…

当在IDEA中实现类实现接口时,如果出现红色错误并且无法引入接口类的包,可能是以下几种情况导致的

1.当在IDEA中实现类实现接口时&#xff0c;如果出现红色错误并且无法引入接口类的包&#xff0c;可能是以下几种情况导致的&#xff1a; 2.缺少依赖&#xff1a;首先检查项目的依赖是否正确配置。如果接口类所在的包不在项目的依赖中&#xff0c;IDEA将无法找到该包并引入。可…