忘记切换分支,不小心在其他分支上修改了很多代码,如何把这些修改拷贝到目标分支?

原文(有修改): https://developer.51cto.com/art/202107/669695.htm

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

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

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

11111 
22222 
33333 
44444 
aaaaa 
bbbbb 
ccccc 

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

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

git checkout -b dev 
vim 1.txt 

修改 dev 分支下的 1.txt文件:

11111 
22222 
33333 
44444 
xxxx
yyyy
zzzz

然后再在dev分支上增加这一改动

git add 1.txt 
git commit -m 'change 1.txt' 

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

大家可以看到,我现在在 dev 分支上。这个时候,我想修改 master 分支上面的1.txt。但是我忘记切换分支了。于是直接修改了dev 分支上的1.txt,这个时候,如果我直接使用命令git checkout master试图切换分支,git 会报错,没有办法切过去。

这个时候解决办法有两种:

1. 复制粘贴法

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

2. git stash

但实际上,git 早就预料到了你有这个需求,所以它已经有了应对方案。

这里我们需要用到 git stash命令,简单理解的话该命令就是把你当前所有的修改都缓存起来,什么时候想把这些缓存调出来,只要执行git stash pop命令就可以了。

具体来说,你只需要按顺序执行如下三条命令:

git stash
git checkout master
git stash pop

上述命令的意思是

  1. 我们先把 dev 分支上的所有修改先缓存起来
  2. 切换到 master 分支
  3. 将缓存 pop 出来,自然就是在master分支上做改动了

现在,我们打开1.txt 文件你会看到,刚才的修改已经自动应用到了master 分支的1.txt 上面了。

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

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

微信公众号:AutoML机器学习
MARSGGBO
如有意合作或学术讨论欢迎私戳联系~
邮箱:marsggbo@foxmail.com

原文地址:https://www.cnblogs.com/marsggbo/p/15771885.html