git-rebase 相关问题

使用git-rebase命令,您可以从一个分支获取更改并在另一个分支上重放它们。


在成功合并后丢弃提交,同时保持合并提交的代码完整

[]从master分支出两个分支:develop和foo。 developer和foo都通过几次提交与master背离。 foo已合并以进行开发。现在,foo和development指向...

回答 1 投票 -1

按日期重新排列git提交历史记录

我将3个不同的git仓库合并为一个,现在我的历史记录如下:A1-A2-A3-B1-B2-B3-C1-C2-C3现在我想按日期重新排列所有这些提交。所以最后可能是...

回答 3 投票 7

我可以在现有提交之下进行git提交,而不在下一次提交中保留其任何内容吗? (只是将代码保存在历史记录中)

我曾经和我的团队一起从事一个项目,在移至git之前,我们使用svn进行版本控制,现在svn的历史已久。我有我们开始使用的原始资源,我想要...

回答 1 投票 0

git重新定位到上游,或者如果没有上游,则迁移到原点/主节点

我有一个git存储库,其中包含许多分支;有些是针对各种变更列表的跟踪分支,有些是“独立的”,通常只有跟踪的分支具有上游分支集。我...

回答 1 投票 0

我如何合并最后两个提交?

我想合并我的最后两个提交。这是git log的结果:现在,我想将最后两个提交(都放入读取框)合并到一个提交中。我该怎么办?

回答 2 投票 11

如何在每次git rebase后继续自动运行bash命令--continue?

我正在尝试将分支重新建立到完全不同的分支上。这是一个反应项目。如果我残酷地合并两个分支,我什至无法编译代码。因此,我正在尝试以交互方式进行基准调整。 ...

回答 1 投票 0

Git从分支中减去推送的提交数

我在同一分支上为某个模块进行了一些代码的共同开发,而在同一分支上我也与同事的模块进行了集成。基本上我最终从...

回答 1 投票 0

在有人将基准或重置推送到已发布的分支后,如何恢复/重新同步?

[我们都听说过,永远不要为已发布的工作重新定级,这很危险,等等。但是,我还没有看到任何有关重新发布已发布的情况的处理方法。 ...

回答 3 投票 86

git rebase-为什么需要解决多个差异

我已经使用了git rebase几次,但我仍然对其实际工作方式感到困惑。使用git-merge似乎很简单-解决分支尖端与另一个尖端之间的差异...

回答 2 投票 0

无需快速转发即可获得更改

我想将源/主服务器中的更改添加到我的search-players-algorithm分支中,而又不使master / master中的search-players-algorithm分支。换句话说,我想更新我的...

回答 2 投票 0

Git不允许变基,因为在没有任何变化的情况下会进行无阶段的更改

[当我尝试git rebase时,我看到以下内容:无法重新设置:您已取消暂存的更改。请提交或隐藏它们。当我尝试git status时,我看到以下内容:在分支xxx上没有要提交的内容,...

回答 1 投票 1

如何从较大的git历史中进行切片,但保持合并/变基的能力

我目前面临着一个大型git存储库(我们称之为上游),其提交可以追溯到10年前。我不需要它的大部分历史记录。实际上,切出...

回答 1 投票 0

在git中,我如何以编程方式从历史记录(变基)中删除/删除特定提交?

我知道如何以交互方式修改git历史记录并删除特定的提交,但我没有找到一种完全自动执行此操作的方法。我想确定具体的提交内容(例如,包含魔法...

回答 1 投票 0

从项目的旧版本恢复git历史记录>>

长话短说:项目正被迁移到新的git存储库服务器,有人只复制项目文件,并在初始提交时将整个项目推送到新的服务器,因为工作从那开始继续...

回答 1 投票 1

重新设置父分支并沿其移动

TLDR,我希望父分支(在线性分支中)在重新设置基准时与新提交一起移动。初始设置:多个功能分支(彼此重叠),每个分支等待合并...

回答 1 投票 0

git状态仍显示为“您的分支先于 N个提交。” git rebase 后> 假设我有一个从本地my-topic-branch分支分支出来的master分支,并且master分支与远程master分支绑定。 my-topic-branch分支最初是由名为tag1的标签创建的。 tag1是一个放置在远程主分支上的标签,由于git fetch,我看到了该标签。 有些时间过去,允许其他人将其更改推送到该远程主分支。再后来,其他人放下了新的tag2。 然后我再次使用git fetch以确保将所有这些远程标记都放入本地存储库中以进行进一步的操作。 我像这样将tag2设置为基准: $ git rebase tag2 First, rewinding head to replay your work on top of it... Applying: CENSORED_LOG_MESSAGE1 Applying: CENSORED_LOG_MESSAGE2 Auto packing the repository in background for optimum performance. See "git help gc" for manual housekeeping. 但是后来我运行git status并看到了这个: $ git status On branch my-topic-branch Your branch is ahead of 'tag1' by 195 commits. (use "git push" to publish your local commits) 我的期望是以上消息应该说明有关tag2的信息,当然不是我在195次提交之前领先于旧标记。 为什么git status会报告my-topic-branch分支的提交,而不是我最近基于的新提交? [如果这是预期的行为,那么很好,我将不得不忽略它,但是奇怪的是,我仍然落后195次提交master,但那肯定不是真的(如果git rebase实际上做了我认为应该做的事情。 更新1 如果HEAD仍在该分支上,我仍然可以通过以下方式找到my-topic-branch的基点: $ git show -s $(git merge-base master @) commit CENSORED_SHA1 (tag: tag2) Author: CENSORED_AUTHOR Date: CENSORED_DATE CENSORED_LOG_MESSAGE3 $ 但是这仍然是关于git status输出的问题。 更新2: 根据Pesho_T's comment更新: 我运行了git branch -vv,并得到了以下内容。这是经过审查的,但是要加上“ 2”和“ 4”之类的数字以区别于其他数字: $ git branch -vv | grep my-topic-branch * my-topic-branch CENSORED_SHA1_2 [tag1: ahead 195] MDFCOR-420 CENSORED_LOG_MESSAGE4 假设我有一个我的主题分支分支,该分支从我的本地master分支分支出来,并且该master分支与远程master分支绑定在一起。 my-topic-branch分支最初是在... 似乎很可能1 您意外创建了一个分支名称 和一个标签名称,它们在缩短时都打印相同。一旦有了两个这样的名称,它们就可以容纳不同的哈希ID。当parsing这样的名称时,您获得的哈希ID有点棘手(有规则,这些规则在the gitrevisions documentation中列出,但是规则也有例外)。最好通过重命名不合适的分支名称来摆脱这种情况。 请记住,像master这样的分支名称实际上是名称refs/heads/master;像v2.25.0这样的tag name 实际上是refs/tags/v2.25.0。因此,即使标签存在,也可以创建名为v2.25.0的branch,因为分支的full名称是refs/heads/v2.25.0,而不是refs/tags/v2.25.0。这两个名称是不同的,但是如果您查看每个的简短版本,则两者均为v2.25.0。 ahead的behind或git status计数消息是运行的结果: git rev-list --count --left-right <name1>...<name2> 请注意,两个名称之间有三个 点。2 两个名称是: name1是您的当前分支; name2是当前分支的上游 。 git rev-list命令,以这种形式(使用三个点),查找左侧名称为从…到达 ,而不是右侧名称的提交,以及<counts (--count),但分开(--left-right)而不是组合。这意味着这些计数取决于您当前的分支(当然,这就是为什么它说“您的分支...位于前面”)的原因。 和 上游设置。您可以通过git branch --set-upstream-to控制上游设置,并可以通过以下方式读取当前分支的上游:$ git rev-parse --abbrev-ref @{u} origin/master $ git rev-parse --symbolic-full-name @{u} refs/remotes/origin/master 为了帮助您在缩写时不小心使 branch name和tag name 看起来都相同的情况,请使用--symbolic-full-name变体。 分支的 上游 始终是另一个分支名称或远程跟踪名称,因为标记名称被禁止:git branch --set-upstream-to=v2.25.0 fatal: Cannot setup tracking information; starting point 'v2.25.0' is not a branch. origin/master之类的远程跟踪名称更为典型,但您 可以 将任何分支的上游设置为任何其他分支名称。如果ahead计数非零,通常就是您所看到的,也就是您在这里看到的。但是,如果两个计数都不为零,则git status将使用单词diverged。如果ahead计数为零,并且behind计数为非零,则git status打印behind计数。如果两个计数都为零,则分支与其上游同步,git status表示Your branch is up to date with ...。 有关三点语法的更多信息,请参见the gitrevisions documentation。要了解 可达性 ,请参阅Think Like (a) Git。对于简短的图形说明,请考虑以下图形: I--J <-- branch1 / ...--G--H <-- master \ K--L <-- branch2, origin/branch1 名称branch1是master的“前2”,因为从提交J开始,我们先返回到I,然后返回H,这意味着I-J的提交可以从branch1到达,但不能从master开始。同样,branch2比master早2,但它的两个是提交K-L。这意味着master是branch1或branch2的2 behind ,而这两个提交分别是I-J或K-L。同时,branch1与origin/branch1之间有分歧,因为它们都比前面[2](I-J)并且比后面[K-L)2。 1 如果您使用move标签,您可能会遇到类似的棘手情况,因为标签在所有Git存储库中都是通用的,但标签也永远都不是move。一旦一个Git存储库具有标签,即使某人已在该Git存储库旨在移动的其他某个Git存储库中强行移动了标签,它也会倾向于假定it具有的副本为正确。比赛。但这会显示不同的症状,因为您不能将分支的上游设置为标签名称。 2 用点集理论的术语,三点语法产生一个symmetric difference。因为这是对称的,所以只要您记得现在也交换了git rev-list --count --left-right将要打印的两个counts,就可以交换两个名称。

假设我有一个我的主题分支分支,该分支从我的本地master分支分支出来,并且该master分支与远程master分支绑定在一起。 my-topic-branch分支最初是在...

回答 1 投票 1

合并错误修复了从发行分支到主分支的补丁

我有一个主分支,负责推动我的最新开发。现在,在某个时候,我会从master分支中释放并创建一个名为release1的新分支。现在我正在对master进行新的开发...

回答 1 投票 2

Git源和目标

当执行git rebase时,我有很多合并冲突要解决。我有两个窗口,源和目标。以下哪项是正确的...源是我正在尝试发生冲突的更改的源...

回答 1 投票 0

如何使用git展平两个顶级合并提交

我最近遇到了一个git场景,我不知道该如何处理。首先,让我们设置场景。理想的工作流程假设您正在维护一个大型开源项目的分支,其中上游...

回答 1 投票 1

© www.soinside.com 2019 - 2024. All rights reserved.