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

开发 前端
我们知道,在使用 Git 的时候,应该要正确使用它的分支(Branch)功能。不同的功能使用不同的分支开发,最后合并进入主分支。

[[409023]]

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

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

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

  1. 11111 
  2. 22222 
  3. 33333 
  4. 44444 
  5. aaaaa 
  6. bbbbb 
  7. ccccc 

如下图所示:

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

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

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

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

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

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

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

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

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

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

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

  1. git stash 
  2. git checkout master 
  3. git stash pop 

运行效果如下图所示:

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

可以看到,刚才的修改已经自动应用到了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」,可以通过以下二维码关注。转载本文请联系未闻Code公众号。

 

责任编辑:武晓燕 来源: 未闻Code
相关推荐

2020-12-01 10:34:04

Git主分支代码

2021-11-12 05:00:43

装饰器代码功能

2021-03-12 21:19:15

Python链式调用

2021-09-13 20:38:47

Python链式调用

2021-07-27 21:32:57

Python 延迟调用

2021-04-27 22:15:02

Selenium浏览器爬虫

2023-10-29 09:16:49

代码安全命令

2021-10-15 21:08:31

PandasExcel对象

2021-07-08 21:49:13

前端后端Cookies

2021-04-05 14:47:55

Python多线程事件监控

2022-03-12 20:38:14

网页Python测试

2022-06-28 09:31:44

LinuxmacOS系统

2021-04-12 21:19:01

PythonMakefile项目

2021-03-18 23:28:45

Python反斜杠字符串

2021-06-08 21:36:24

PyCharm爬虫Scrapy

2021-08-01 15:26:59

协程Asyncio并发数

2023-10-28 12:14:35

爬虫JavaScriptObject

2021-04-19 23:29:44

MakefilemacOSLinux

2022-06-09 21:34:41

Python代码函数

2022-03-07 09:14:04

Selenium鼠标元素
点赞
收藏

51CTO技术栈公众号