git 分支中的修改文件溢出到另一个分支

     2023-03-28     109

关键词:

【中文标题】git 分支中的修改文件溢出到另一个分支【英文标题】:Modified files in a git branch are spilling over into another branch 【发布时间】:2022-01-04 18:51:38 【问题描述】:

我正在开发一个带有主分支和另一个主题分支的 git 存储库。我已切换到主题分支并修改了一个文件。现在,如果我切换到 master 分支,相同的文件会显示为已修改。

例如:

git-build 分支中的 git 状态:

# On branch git-build
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

切换到主分支

[root@redbull builder_scripts (git-build)]# git co master
M       builder_scripts/cvsup_current
Switched to branch "master"

主分支中的 git 状态

[root@redbull builder_scripts (master)]# git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   cvsup_current
#

为什么文件在 git-build 分支中被修改,却在 master 分支中显示为已修改?

我的理解是分支彼此独立,当我从一个分支更改为另一个分支时,更改不会从一个分支“溢出”到另一个分支。所以我显然在这里遗漏了一些东西。

有人有线索吗?

【问题讨论】:

【参考方案1】:

为什么文件在 git-build 分支中被修改,却在 master 分支中显示为已修改?

要记住的关键是文件在 git-build 分支中没有被修改。它仅在您的工作副本中进行了修改。

只有在您提交时,才会将更改放回您已签出的任何分支中

【讨论】:

谢谢,这些答案让我明白了这一点! 我刚刚意识到,来自 SVN 的思维方式,在分支中提交实际上并不是将其提交到您的“SVN”服务器,它更像是“将我的更改保存到这个分支”。我还在努力调整。 "它只在你的工作副本中被修改过" 但是 git 是如何做到这一点的呢?如果我修改了一个分支上的文件,然后签出该文件已更改的另一个分支,即文件不再共享相同的基础,会发生什么情况。这与 rebase 有什么不同?如果我修改了一些文件,在我提交这些更改之前,git 不允许我重新设置基准。 我在 Windows 上使用 Git 时遇到过这个污染问题。来自已提交更改的文件在切换到另一个分支后留在文件系统中。【参考方案2】:

如果您想在去另一个分支上工作时将更改临时存储到一个分支,您可以使用git stash 命令。这是使用 git 令人惊奇的小秘密之一。示例工作流程:

git stash #work saved
git checkout master
#edit files
git commit
git checkout git-build
git stash apply #restore earlier work

git stash 存储了一堆更改,因此您可以安全地存储多个检查点。你也可以给他们名字/描述。完整使用信息here。

【讨论】:

虽然这不能直接回答为什么部分,但这个答案最符合 OP 试图做的事情的意图。这正是我想要的 git stash 不会保护新文件。它仅存储已跟踪的文件。因此,如果一个人创建了新文件,即使在存储之后,这些新文件也将在其他文件夹中可用。【参考方案3】:

这是 git 的默认行为。

如果您愿意,可以使用 -f 标志进行结帐以进行“干净结帐”。

【讨论】:

请注意,这不会将更改保留在您要离开的分支或任何东西的顶部。这将丢弃未提交的更改(除非文件未跟踪)。 在极少数情况下,您想使用git checkout -f,因为它会立即、不可撤销地并且不会提示丢弃任何未提交的更改。 git checkout 的工作方式是有原因的,我建议阅读下面 Gareth 的评论。【参考方案4】:

在您添加提交之前,修改后的文件不会放入存储库中。如果你切换回你的主题分支并提交文件,那么它就不会出现在主分支上。

【讨论】:

【参考方案5】: 它不像 git 分支是相互依赖的,但它们也是 每个分支也没有单独的完整代码库。 对于每次提交,Git 都会存储一个对象,该对象包含指向 变化。所以每个分支都指向它自己的最新提交,HEAD 指向你当前所在的分支。 切换分支时,HEAD 指针指向该分支 分支的特定提交。所以如果有修改过的文件, 默认行为是复制它们。

您可以执行以下操作来解决此问题。

    使用-f 选项忽略更改。

如果要保存更改:

    在同一分支中本地提交更改,然后切换 分支。 使用git stash,切换分支,做你的工作,切换回 原来的分支,做git stash apply

【讨论】:

git合并指定文件到另一个分支

经常被问到如何从一个分支合并特定的文件到另一个分支。其实,只合并你需要的那些commits,不需要的commits就不合并进去了。合并某个分支上的单个commit首先,用gitlog或sourcetree工具查看一下你想选择哪些commits进行合并,例如... 查看详情

git将一个分支中的文件移植到另一个分支

基于gitcheckout——检出命令。此命令和分支操作相关,最为常用的两种情形是创建分支和切换分支,使用gitcheckout--patch可以达到将一个分支上的文件植入到另一个分支中的目的。命令行原理:–patch是补丁命令,git... 查看详情

如何使用 Git / IntelliJ 将整个文件从一个分支移动/复制到另一个分支? [复制]

】如何使用Git/IntelliJ将整个文件从一个分支移动/复制到另一个分支?[复制]【英文标题】:Howtomove/copyentirefilefromonebranchtoanotherwithGit/IntelliJ?[duplicate]【发布时间】:2018-11-2715:26:22【问题描述】:我想复制的不是更改,而是整个文... 查看详情

git使用问题

...rwrittenbycheckout。后面跟了几个文件  场景:需要从一个分支切换到另一个分支时报错  方法:gitclean-d-fx""  原因:之前修改了.gitignore文件,加入一些不需要用git管理的文件类型,导致起始分支中的“残留”的被排除... 查看详情

Git,将开发从一个分支转移到另一个分支

】Git,将开发从一个分支转移到另一个分支【英文标题】:Git,movingdevelopmentfromonebranchtoanother【发布时间】:2022-01-1103:27:39【问题描述】:我有一个Git存储库,其中包含一个带有两个分支的Java库:ma​​in和jdk8。jdk8分支是主要的... 查看详情

idea中git分支未push的变更集如何合并到另一个分支

使用rebase命令 刚开始,A分支和B分支的代码是一样的,把A分支checkout为当前分支,并且修改了代码,进行【commit】和【push】,commit成功了,但是push没有权限。这个时候在checkout到B分支,之前的修改已经没有了,它被提交到... 查看详情

合并到 git 中的分支而不切换到它

】合并到git中的分支而不切换到它【英文标题】:Mergingtoabranchingitwithoutswitchingtoit【发布时间】:2011-09-2617:50:42【问题描述】:我有一个应用程序在一个分支的git存储库中运行(比如dev)。应用程序修改一些存储库中的内容并提... 查看详情

Git 在将两个分支合并到主(主)分支之前将一个开发人员分支合并到另一个开发人员分支

】Git在将两个分支合并到主(主)分支之前将一个开发人员分支合并到另一个开发人员分支【英文标题】:GitMergingonedeveloperbranchtoanotherdeveloperbranchbeforemergingbothbranchestomaster(themain)branch【发布时间】:2021-11-1313:59:40【问题描述】... 查看详情

使用 Git 将未合并的功能分支合并到另一个功能分支

】使用Git将未合并的功能分支合并到另一个功能分支【英文标题】:Mergenon-mergedfeaturebranchintoanotherfeaturebranchwithGit【发布时间】:2013-12-0509:14:08【问题描述】:我的公司有一个如下所示的Git工作流程:从原始分支创建功能分支(... 查看详情

git合并某分支某次commit到另一个分支

参考技术A将新分支dev2的一次提交,合并到dev1中1、切到分支dev22、切换分支到dev1上面结束之后,如果不想合并可以用gitcherry-pick--abort放弃本次合并,否则直接push到远程库push到远程git仓库 查看详情

在 Git 中将选定提交从一个分支合并到另一个分支的更好方法

】在Git中将选定提交从一个分支合并到另一个分支的更好方法【英文标题】:WhichisbetterwaytomergeselectedcommitsfromonebranchtootherbranchinGit【发布时间】:2019-01-2111:03:06【问题描述】:我有Master和Develop分支,开发人员在发布时将其代码... 查看详情

Git:如何防止特定的提交被合并到另一个分支中?

】Git:如何防止特定的提交被合并到另一个分支中?【英文标题】:Git:HowcanIpreventaspecificcommitfrombeingmergedintoanotherbranch?【发布时间】:2016-07-2600:32:34【问题描述】:我们公司的Git工作流程如下:我们有一个master分支,一些feature/*... 查看详情

如何在 Git 中将特定提交从一个分支合并到另一个分支?

】如何在Git中将特定提交从一个分支合并到另一个分支?【英文标题】:HowdoImergeaspecificcommitfromonebranchintoanotherinGit?【发布时间】:2011-09-1608:30:32【问题描述】:我有BranchA,比BranchB早113次提交。但我只想将来自BranchA的最后10个... 查看详情

git09-合并

...,不需要一个中心版本库。一次合并可以结合两个或多个分支。但是大多数情况下,一次合并只结合两个分支。在Git中,合并必须发生在一个版本库中——也就是说,所有要进行合并的分支必须在同一个版本库中。版本库中的分... 查看详情

如何在 JGit 中从一个 git 分支硬重置到另一个分支?

】如何在JGit中从一个git分支硬重置到另一个分支?【英文标题】:HowtohardresetfromonegitbranchtootherinJGit?【发布时间】:2015-12-2014:10:45【问题描述】:我有两个分支,一个是master,另一个是level1。现在level1是最新的我需要在gitbash中... 查看详情

git把一个分支上的某个提交合并到另一个分支

在Git的实际使用场景中,未必都是很规矩的拉一个分支,开发一个功能,等功能测试完成后,合并到主分支。有很多的场景都是很多人在同一个开发分支上开发,然后按照上线的实际需要,依次去上传自己的功能模块,这个功能... 查看详情

记录git拉取远程分支代码,同步到另一个git上(代码片段)

    最近有需求从某git上拉取所有分支代码同步到另一git上,现记录操作步骤,以便日后使用: 1:先克隆其中一个分支代码到本地环境gitclone-btesthttp://账号:密码@XXX.git  2:查看本地分支gitbrach  3:查看远程分支g... 查看详情

如何将一个远程分支覆盖而不是合并到另一个分支?

】如何将一个远程分支覆盖而不是合并到另一个分支?【英文标题】:HowcanIoverwrite,notmerge,oneremotebranchintoanotherbranch?【发布时间】:2013-04-1619:30:54【问题描述】:我有两个分支。分期和测试版。暂存中有代码(包括文件),我根... 查看详情