如何将本地未提交的更改合并到另一个Git分支?
如何在Git中执行以下操作?
我当前的分支是branch1,我做了一些本地更改。 但是,我现在意识到我实际上是要将这些更改应用于branch2。 有没有办法应用/合并这些更改,以便它们成为branch2上的本地更改而不在branch1上提交它们?
#1楼
到目前为止给出的答案并不理想,因为它们需要大量不必要的工作来解决合并冲突,或者它们做出太多假设,这些假设经常是错误的。 这是如何做到完美。 该链接指向我自己的网站。
如何在git中提交不同的分支
您在my_branch
上有未提交的更改要提交给master
,而不提交my_branch
所有更改。
例
git merge master
git stash -u
git checkout master
git stash apply
git reset
git add example.js
git commit
git checkout .
git clean -f -d
git checkout my_branch
git merge master
git stash pop
说明
首先将master
合并到您的分支中,因为无论如何您最终都必须这样做,现在是解决任何冲突的最佳时机。
git stash -u
的-u
选项(又名--include-untracked
)可以防止你以后在master
执行git clean -f -d
时丢失未跟踪的文件。
在git checkout master
,重要的是你不要git stash pop
,因为你以后需要这个存储。 如果你弹出在my_branch
创建的存储,然后在master
执行git stash
,当你稍后在my_branch
应用该存储时,将导致不必要的合并冲突。
git reset
unstages由git stash apply
产生的一切。 例如,已经在存储中修改但在master
不存在的文件将被暂存为“由我们删除”冲突。
git checkout .
和git clean -f -d
丢弃未提交的所有内容:对跟踪文件的所有更改以及所有未跟踪的文件和目录。 它们已经保存在存储中,如果留在master
,在切换回my_branch
时会导致不必要的合并冲突。
最后一个git stash pop
将基于原始的my_branch
,因此不会导致任何合并冲突。 但是,如果您的存储包含您已提交掌握的未跟踪文件,git会抱怨它“无法从存储中恢复未跟踪的文件”。 要解决此冲突,请从工作树中删除这些文件,然后git stash pop
, git add .
,和git reset
。
#2楼
前面提到的藏匿方法的一个较短的替代方案是:
暂时将更改移动到存储区。
git stash
创建并切换到新分支,然后只需一步即可将存储区弹出。
git stash branch new_branch_name
然后只需add
更改并将更改commit
到此新分支。
#3楼
警告:不适用于git新手。
这在我的工作流程中已经足够了,我几乎试图为它编写一个新的git命令。 通常的git stash
流程是要走的路, 但有点尴尬。 我通常先做一个新的提交,因为如果我一直在查看更改,所有的信息都是我脑海中的新鲜事,最好只是启动git commit
-ing我发现的东西(通常是我在工作时发现的属于master的bugfix)在功能分支上)马上。
它也很有用 - 如果你经常遇到这样的情况 - 在你当前的工作目录旁边有一个总是有
master
分支签出的工作目录 。
所以我如何实现这一点是这样的:
git commit
使用良好的提交消息立即git commit
更改。git reset HEAD~1
撤消当前分支的提交。- (可选)继续处理该功能。
有时候稍后(异步),或者立即在另一个终端窗口中:
cd my-project-master
这是另一个WD共享相同的.git
git reflog
找到我刚刚创建的bugfix。git cherry-pick SHA1
的提交。
(可选)(仍然是异步的)您可以重新绑定(或合并)您的功能分支以获取错误修正,通常在您即将提交PR并已清理您的功能分支和WD时:
cd my-project
这是我正在研究的主要WD。git rebase master
来获取错误修正。
通过这种方式,我可以不间断地继续处理该功能,而不必担心git stash
任何东西或者必须在git checkout
之前清理我的WD(然后再次检查功能分支退出。)并且仍然拥有我的所有错误修正转到master
而不是隐藏在我的功能分支中。
当您处理一些重要功能时,IMO git stash
和git checkout
是一个真正的PIA。
#4楼
如果它是关于承诺的更改,你应该看看git-rebase,但正如VonC在评论中指出的那样,当你谈论本地更改时,git-stash肯定是这样做的好方法。
#5楼
由于您的文件尚未在branch1
中branch1
:
git stash
git checkout branch2
git stash pop
要么
git stash
git checkout branch2
git stash list # to check the various stash made in different branch
git stash apply x # to select the right one
由benjohn 评论 (参见git stash
手册页 ):
要隐藏当前未跟踪(新添加的)文件,请添加参数
-u
,以便:
git stash -u
来源:站长资讯平台
如何将本地未提交的更改合并到另一个Git分支?的更多相关文章
- git reset之后找回本地未提交的代码
头脑发热使用了git reset命令回退到了之前的一个版本,结果把本地没有提交的代码给覆盖掉了..... 作为一个bug员自然是想恢复,毕竟重新写还得再测一遍,本着能懒一点是一点的原则,开始了恢复代码 ...
- git撤销本地所有未提交的更改
1. git clean -df2. git reset --hard第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退.而第二个命令把tracked ...
- git如何删除本地所有未提交的更改
stash很好用,至少不会影响 .gitignore 里面的不跟踪的文件: git add . && git stash && git stash drop ===== ...
- 如何导入另一个 Git库到现有的Git库并保留提交记录
问题描述: 我在本地有两个Git库项目(D1=PC项目 包含通用项目,D2=移动项目 也包含通用项目这两个项目在同一目录下),因为这两个项目使用的通用项目是一样的如数据库访问等 只有显示层(vie ...
- Git分支合并冲突解决
前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的 ...
- Git本地有未提交文件,直接拉取远端最新版本
git pull = git fetch + git merge 1.修改不同的文件: 用户D和用户L在本地提交中修改了不同的文件,如果用户D将改动推送到服务器后,用户L再推送就会遇到非快进式推送错误 ...
- 【IntelliJ IDEA】在idea上操作 git分支合并【如何将远程swagger分支 合并到 远程 master分支上】【如何切换 本地分支】
============================================ 明确一点: 如果项目交给git管理了[如何将项目交给git管理:https://www.cnblogs.com ...
- GIT 如何删除某个本地的提交
一.rm后要commit一下才会生效,但这样只是让文件不再出现在今后的版本中,文件副本仍然会在.git/下(这样git才能让误删的文件恢复). 要彻底消灭文件副本,那就要让文件彻底从历史中消失,分两种 ...
- Git分支操作——查看、新建、删除、提交、合并
查看分支 1 查看本地分支 $ git branch 2 查看远程分支 $ git branch -r 创建分支 1 创建本地分支 $ git branch branchName 2 切换 ...
随机推荐
- AP架构基本过程
①.有线网络搭建(vlan,dhcp,路由等.) ②.ap零配置启动,通过dhcp获取IP地址及网关ip,同时获取ac ip地址. ③.AP主动建立到达ac的capwap隧道. ④.ap与ac建议隧道 ...
- 2,StructuredStreaming的事件时间和窗口操作
推荐阅读:1,StructuredStreaming简介 使用Structured Streaming基于事件时间的滑动窗口的聚合操作是很简单的,很像分组聚合.在一个分组聚合操作中,聚合值被唯一保存在 ...
- vSphere Replication5.5安装
vSphere Replication5.5概述 VMware vSphere Replication简称VR是 VMwarevCenter Server 的扩展,提供基于管理程序的虚拟机复制和恢复功 ...
- mongodb与sql语句对比
左边是mongodb查询语句,右边是sql语句.对照着用,挺方便. db.users.find() select * from users db.users.find({"age" ...
- javacv 设置帧率(续)
前文地址:https://www.cnblogs.com/svenwu/p/9663038.html 前文已经对大多数正常情况可以支持了,但是我最近处理一些公司的视频流,发现一些坑爹的情况 每次给的视 ...
- oracle(8)视图和查询数据库对象方法
视图 view 视图是数据库的对象之一. 视图也叫做虚表,既虚拟表,本质是对应一条select 语句, select语句的结果集赋予一个名字就是视图的名字. 作用: 1.可以简化复杂的查询 2.可以限 ...
- Python调用OpenCV读显写
OpenCV提供了python的接口,而且很重要的一点是python下的很多接口名与C++的接口名是一样的,这一篇先记录python调用OpenCV去读取图像.显示图像和保存图像. 1.OpenCV读 ...
- 线段树--线段树【模板1】P3372
题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...
- find: paths must precede expression
郁闷了今天进行如下的查询居然报告错误, [root@localhost /]# find /root/ -name *.txtfind: paths must precede expressionUs ...
- 运用Access学习数据库的三大范式
第一范式(1NF):强调的是列的原子性,即“列不能够再分成其他几列”,同一列中不能有多个值. 例子:业余爱好编码表+员工编码表 当员工杨来的业余爱好有多个时,此时的数据库设计不满足第一范式,可进行如下 ...