一日一技:使用 Git 在错误的分支上修改了代码怎么办?

简介: 一日一技:使用 Git 在错误的分支上修改了代码怎么办?

我们知道,在使用 Git 的时候,应该要正确使用它的分支(Branch)功能。不同的功能使用不同的分支开发,最后合并进入主分支。但有时候会出现这样一种情况——我代码都已经写完了,才发现我写错分支了。这个时候,怎么把我的修改迁移到目标分支上,并且不修改现在正在使用的分支?


我们用一个简单的例子来说明这种情况。


首先创建一个文件夹:test_git,并且在里面创建一个1.txt 文件,这个文件的内容如下:


11111
22222
33333
44444
aaaaa
bbbbb
ccccc


如下图所示:


1.png


接下来,我执行命令git init,把当前文件夹作为一个git 源,并把1.txt 提交到源里面,让 git 进行管理。


2.png


现在,我基于当前分支,创建一个dev分支。并对新分支里面的1.txt 文件进行修改:


git checkout -b dev
vim 1.txt
git add 1.txt
git commit -m 'change 1.txt'


3.png


image.gif

好了,现在准备工作做完了。我现在有两个分支masterdev。每个分支里面都有一个叫做1.txt的文件。并且这两个1.txt文件的内容前半截相同,后半截不同。


大家可以看到,我现在在 dev 分支上。这个时候,我想修改 master 分支上面的1.txt。但是我忘记切换分支了。于是直接修改了dev 分支上的1.txt:


4.png


image.gif红框中的内容,原本是想在 master 分支修改的

这个时候,如果我直接使用命令git checkout master试图切换分支,git 会报错,没有办法切过去:


5.png


image.gif

很多人可能会这样做:打开一个记事本,把1.txt 里面修改的内容记录下来。然后使用命令git checkout -- 1.txt恢复1.txt 到修改之前的内容。然后切换到 master 分支。再根据记事本里面记录的修改内容,把代码粘贴到1.txt 文件中。如果只有1个文件修改那还好。但是在软件开发中,可能你修改了很多个文件。所以这种方法会变得非常笨拙。

但实际上,git 早就预料到了你有这个需求,所以它已经有了应对方案。我们现在回到刚刚在 dev 分支修改了1.txt 的时候:

image.gif

6.png


这个时候,千万不要执行git add命令。


你只需要按顺序执行如下三条命令:


git stash
git checkout master
git stash pop


运行效果如下图所示:


7.png


然后,我们打开1.txt 文件:


8.png

image.gif

可以看到,刚才的修改已经自动应用到了master 分支的1.txt 上面了。


git stash会把当前修改的内容缓存起来,并恢复当前工作区到你修改之前的状态。然后切换回 master 分支,执行命令git stash pop,把刚才的修改应用到 master 分支的1.txt 文件中。如果不出现冲突,那么它会自动修改1.txt 文件。如果出现了冲突,那么需要你打开1.txt 文件以后,手动解除冲突。


可以看到,使用git stash命令,比你单独手动记录修改的内容,切换分支再重新改一遍要方便很多。


更多 Git 相关的小技巧,大家可以在微软提供的学习网站进行学习:Introduction to Git - Learn | Microsoft Docs[1].


参考资料


[1]

Introduction to Git - Learn | Microsoft Docs: https://docs.microsoft.com/en-us/learn/modules/intro-to-git/?WT.mc_id=DT-MVP-5003916


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
3月前
|
存储 安全 开发工具
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
281 4
深度解决 Git “fatal: refusing to merge unrelated histories” 错误解析什么是历史分支优雅草卓伊凡
|
19天前
|
开发工具 git
Git版本控制工具合并分支merge命令操作流程
通过以上步聚焦于技术性和操作层面指南(guidance), 可以有效管理项目版本控制(version control), 并促进团队协作(collaboration).
112 15
|
8月前
|
开发工具 git
图解Git——分支的新建与合并《Pro Git》
在Git开发中,新建与合并分支是常见的操作。以实际开发为例:为实现新需求创建分支`iss53`进行开发;遇紧急Bug时,切换至线上分支创建`hotfix`修复并合并回线上分支,再切换回`iss53`继续工作。完成`iss53`后,切换到`master`合并。若出现冲突,使用`git status`查看,手动编辑解决冲突后标记为已解决并提交。图形化工具如`git mergetool`也可辅助解决冲突。
178 9
|
4月前
|
JavaScript 前端开发 持续交付
实际工作中 Git Commit 代码提交规范是什么样的?
实际工作中 Git Commit 代码提交规范是什么样的?
245 7
|
7月前
|
开发工具 git 开发者
vscode+git解决远程分支合并冲突
通过这些详细步骤,您可以掌握如何使用VSCode和Git高效地解决远程分支合并冲突,提高开发效率和代码质量。希望这些内容对您的学习和工作有所帮助。
1655 86
|
4月前
|
网络安全 开发工具 git
Git仓库创建与代码上传指南
本教程介绍了将本地项目推送到远程Git仓库的完整流程,包括初始化本地仓库、添加和提交文件、创建远程仓库、关联远程地址及推送代码。同时,还提供了`.gitignore`配置、分支管理等可选步骤,并针对常见问题(如认证失败、分支不匹配、大文件处理及推送冲突)给出了解决方案。适合初学者快速上手Git版本控制。
|
3月前
|
开发工具 git 索引
如何使用Git的暂存区来管理代码更改?
如何使用Git的暂存区来管理代码更改?
737 0
|
8月前
|
存储 项目管理 开发工具
图解Git——分支开发工作流《Pro Git》
分支开发工作流利用Git的分支功能,支持灵活的项目管理。长期分支如`master`和`develop`分别保存稳定和开发中的代码;短期主题分支用于开发单一特性或修复问题,完成后合并到主分支。此模式确保代码稳定性,支持并行开发、便于审查和灵活调整。建议维护明确的长期分支,保持主题分支短小精悍,并定期清理无用分支。配置上可保护关键分支,遵循命名规范。
353 7
|
8月前
|
存储 缓存 Java
图解Git——远程分支《Pro Git》
远程分支是 Git 中用于管理分布式协作的关键概念。远程引用指向远程仓库中的分支和标签,常用 `git ls-remote` 或 `git remote show` 查看。日常开发中,通常使用远程跟踪分支(如 `origin/main`)与远程分支交互,简化远程仓库状态的管理和使用。远程跟踪分支记录远程分支的状态,但本身只读。
154 6
|
开发工具 git
Git错误提示之:fatal: Not a git repository (or any of the parent directories): .git
产生原因:一般是没有初始化git本地版本管理仓库,所以无法执行git命令 解决方法:操作之前执行以下命令行: git init 然后执行一下git status查看状态信息,good,问题解决。
10146 0