如何在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楼

前面提到的藏匿方法的一个较短的替代方案是:

暂时将更改移动到存储区。

  1. git stash

创建并切换到新分支,然后只需一步即可将存储区弹出。

  1. git stash branch new_branch_name

然后只需add更改并将更改commit到此新分支。


#3楼

警告:不适用于git新手。

这在我的工作流程中已经足够了,我几乎试图为它编写一个新的git命令。 通常的git stash流程是要走的路, 有点尴尬。 我通常先做一个新的提交,因为如果我一直在查看更改,所有的信息都是我脑海中的新鲜事,最好只是启动git commit -ing我发现的东西(通常是我在工作时发现的属于master的bugfix)在功能分支上)马上。

它也很有用 - 如果你经常遇到这样的情况 - 在你当前的工作目录旁边有一个总是有master分支签出的工作目录 。

所以我如何实现这一点是这样的:

  1. git commit使用良好的提交消息立即git commit更改。
  2. git reset HEAD~1撤消当前分支的提交。
  3. (可选)继续处理该功能。

有时候稍后(异步),或者立即在另一个终端窗口中:

  1. cd my-project-master这是另一个WD共享相同的.git
  2. git reflog找到我刚刚创建的bugfix。
  3. git cherry-pick SHA1的提交。

(可选)(仍然是异步的)您可以重新绑定(或合并)您的功能分支以获取错误修正,通常在您即将提交PR并已清理您的功能分支和WD时:

  1. cd my-project这是我正在研究的主要WD。
  2. git rebase master来获取错误修正。

通过这种方式,我可以不间断地继续处理该功能,而不必担心git stash任何东西或者必须在git checkout之前清理我的WD(然后再次检查功能分支退出。)并且仍然拥有我的所有错误修正转到master而不是隐藏在我的功能分支中。

当您处理一些重要功能时,IMO git stashgit checkout是一个真正的PIA。


#4楼

如果它是关于承诺的更改,你应该看看git-rebase,但正如VonC在评论中指出的那样,当你谈论本地更改时,git-stash肯定是这样做的好方法。


#5楼

由于您的文件尚未在branch1branch1 :

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分支?的更多相关文章

  1. git reset之后找回本地未提交的代码

    头脑发热使用了git reset命令回退到了之前的一个版本,结果把本地没有提交的代码给覆盖掉了..... 作为一个bug员自然是想恢复,毕竟重新写还得再测一遍,本着能懒一点是一点的原则,开始了恢复代码 ...

  2. git撤销本地所有未提交的更改

    1. git clean -df2. git reset --hard第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退.而第二个命令把tracked ...

  3. git如何删除本地所有未提交的更改

    stash很好用,至少不会影响 .gitignore 里面的不跟踪的文件: git add . && git stash && git stash drop ===== ...

  4. 如何导入另一个 Git库到现有的Git库并保留提交记录

    问题描述: 我在本地有两个Git库项目(D1=PC项目 包含通用项目,D2=移动项目 也包含通用项目这两个项目在同一目录下),因为这两个项目使用的通用项目是一样的如数据库访问等   只有显示层(vie ...

  5. Git分支合并冲突解决

    前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的 ...

  6. Git本地有未提交文件,直接拉取远端最新版本

    git pull = git fetch + git merge 1.修改不同的文件: 用户D和用户L在本地提交中修改了不同的文件,如果用户D将改动推送到服务器后,用户L再推送就会遇到非快进式推送错误 ...

  7. 【IntelliJ IDEA】在idea上操作 git分支合并【如何将远程swagger分支 合并到 远程 master分支上】【如何切换 本地分支】

    ============================================ 明确一点: 如果项目交给git管理了[如何将项目交给git管理:https://www.cnblogs.com ...

  8. GIT 如何删除某个本地的提交

    一.rm后要commit一下才会生效,但这样只是让文件不再出现在今后的版本中,文件副本仍然会在.git/下(这样git才能让误删的文件恢复). 要彻底消灭文件副本,那就要让文件彻底从历史中消失,分两种 ...

  9. Git分支操作——查看、新建、删除、提交、合并

    查看分支 1 查看本地分支 $ git branch   2 查看远程分支 $ git branch -r     创建分支 1 创建本地分支 $ git branch branchName 2 切换 ...

随机推荐

  1. Python的递归深度问题

    Python的递归深度问题 1.Python默认的递归深度是有限制的,当递归深度超过默认值的时候,就会引发RuntimeError.理论在997. 2.解决方法:最大递归层次的重新调整,解决方式是手工 ...

  2. Java语言学习总结 扩展篇 DateFormat类

    DateFormat类 java.text .DateFormat 是 日期/时间格式化子类的抽象类,我们通过这个类可以帮我们完成日期和文本之间的转换:也就是可以在Date对象与String对象之间进 ...

  3. SASS - 环境搭建

    SASS – 简介 SASS – 环境搭建 SASS – 使用Sass程序 SASS – 语法 SASS – 变量 SASS- 局部文件(Partial) SASS – 混合(Mixin) SASS ...

  4. ansible 文本多行替换实例

    将<level='info'> 等全部替换为<level='ERROR'> - name: Before Ansible 2.3, option 'dest', 'destfi ...

  5. 新iPhone泄密12人被捕,苹果这是下狠手的节奏

    一直以来,苹果在保密这件事儿上就秉持着强硬态度.还记得当年乔老爷子在的时候,苹果的保密工作在科技行业算得上是首屈一指.每款iPhone及其他新品在正式发布前,几乎不会被曝出什么消息.而这,或许也是&q ...

  6. JZOJPJ-C 8/21题解

    原题大战D1 吐槽: T1 \(O(N^2)\; N \leq 26\) N大时还要写高精, 可以增加难度 T2 不给范围 T3 居然没有完全卡掉 不对应该赞美出题人 T4 PJ考个四边形不等式?? ...

  7. nginx反向代理和负载均衡的实现

    反向代理和负载均衡的关系可以理解为,一个ip的负载均衡就是反向代理. 反向代理使用的是:proxy_pass指令   负载均衡使用的是:proxy_pass指令+upstream指令 负载均衡的3中方 ...

  8. dac FDMemTable

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  9. Docker安装 - CentOS7环境

    Docker安装 - CentOS7环境 安装Docker 我是虚拟机装的Centos7,linux 3.10 内核,docker官方说至少3.8以上,建议3.10以上(ubuntu下要linux内核 ...

  10. JOIN US | 京东云诚聘技术精英

    清新的办公区域感受自然的气息,温馨的团队为你我放飞青春的理想 上有天文下有地理的阅读区域 各类图书提供借阅 绿植环绕生机勃勃的会客区域洋溢青春 [高级Java工程师] 职位描述: 参与云计算相关平台/ ...