问题标签 [git-rebase]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
14504 浏览

git - Git rebase 失去了历史,那为什么要 rebase 呢?

在过去的几天里,我一直在研究使用 Git 进行变基。大多数关于变基的论点都说它清理了历史并使其更加线性。如果你做简单的合并(例如),你会得到一个历史,显示历史何时分歧以及何时重新组合在一起。据我所知,变基删除了所有历史记录。问题是:你为什么不希望回购历史反映代码开发的所有方式,包括它在哪里以及如何分歧?

0 投票
2 回答
2523 浏览

git - Git rebase --continue 打开编辑器

在 rebase 因冲突而失败后,我无法使用 Git GUI 客户端继续 rebase。表演时

在命令行(msysgit 1.7.4)上,它打开了一个文本编辑器。关闭它后,Git 继续。如何避免打开编辑器?

0 投票
1 回答
2872 浏览

git - 在一系列 git 提交中提取对单个文件的更改

我使用的构建系统通常要求在执行完整构建之前将项目数据提交到本地存储库。这——连同我经常提交并在推送到公共仓库之前重新设置基准的习惯——意味着我通常在远程头顶上有一堆提交。他们中的大多数人都有像“s”这样的提交消息,因为我知道他们会被压扁。

我在这里遇到的情况是自动化重新调整提交列表的步骤之一。我知道我对某个文件所做的所有更改都不应该推送到公共存储库,我正在寻找一种方法来编辑每个提交,以便将对该文件的更改拆分为单独的提交,稍后我将压缩这些提交变基。

例如,如果来源是 HEAD,那么这是我在顶部的提交:

我想遍历master..master-dave的所有提交,提取对./file.txt的更改,给我:

最后,我会运行 git rebase -i origin/master,将所有“DD”提交压缩在一起,所有“s”提交到“将 pkg 与 master 分支同步”,重新排序,更新 master ,然后推到原点,最后得到:

我很确定答案在于 git filter-branch,但我不知道怎么做。


编辑:

  • --autosquash 修复了“s”提交的烦恼,但这不是主要问题。我仍然不知道如何将更改拆分到特定文件,这必须在我压缩它们之前发生。
  • smudge/clean 过滤器很漂亮,但我不做关键字替换,而且我不认为我想在我的个人分支上维护的更改将是可预测的,足以编写脚本。我认为我总是必须在公共大师之前至少提交一次。
0 投票
1 回答
1883 浏览

svn - Git:合并两个不同的独立存储库

存储库 A:在修订时从项目的 SVN 迁移到 git r:克隆了整个内容,包括 SVN 的所有历史、标签等。之后对 git 进行了一些开发。

存储库 B:同一个项目,但在修订版时从 SVN 独立迁移r+small_number。只有最新的快照被带入 git。之后大量独立开发。

现在我将 A 合并到 B 中。想法是 SVN 将被丢弃,开发将继续在developGitHub 上项目的 repo 分支中进行。我使用简单的合并来完成这项工作;幸运的是,真正的冲突很少。开发主要是在不同的领域,尽管在合并后有很多清理工作,与 git 无关。

但是:现在,当我git rebase -i HEAD~2合并的结果进行例如操作时,我知道这应该让我重新设置最后两个提交的基础,我看到了大约 300 多个提交的页面——这是自 SVN 修订版 1 以来项目的完整历史。我中止了 rebase,因为害怕搞砸更多(显然我是一个完整的 Git 新手)。

这是预期的结果吗?这是可取的吗?如果不是,如何解决?

请注意,所有单元测试等都通过了,文件本身还可以,只是我不明白 git 元数据/历史记录发生了什么。

编辑:这就是我*认为*存储库现在的样子:

0 投票
2 回答
16589 浏览

git - 恢复交互式 git rebase

完成一个功能分支后,git rebase -i我不小心删除了所有提交。我不完全确定,但我怀疑我没有压缩我的提交,而是用提交消息替换了整个条目。

http://shafiulazam.com/gitbook/4_interactive_rebasing.html说:

交互式 rebase 可以做的最后一件有用的事情是为您删除提交。如果不是为提交行选择“pick”、“squash”或“edit”,您只需删除该行,它将从历史记录中删除该提交。

我的问题是:有没有办法恢复/撤消这个?

0 投票
1 回答
852 浏览

git - 变基,但忽略一个上游提交?

我正在尝试将 git 用于本地工作流程管理,并着眼于为我的团队提出建议。所以我想完全理解它,我遇到了一些我不理解的事情。

我进入 git-land 的地方是,我有一个 SVN 存储库,其中有我和另一位开发人员正在开发它。我们的 PM 更改了项目时间表,因此他的子项目需要几乎立即投入生产,然后我的大约一个月后。我们都在同一个 SVN 存储库中开发,并且我的东西​​已经开始对用户可见,因此需要为即将到来的生产迁移而退出。

我更新了我的 SVN 工作目录。我在同一个目录中启动了一个 git 存储库(忽略 .svn 等)。我确实git branch map-dev为我的(与地图相关的)子项目创建了一个开发分支。我确实git checkout master回到了 SVN 同步的分支,并编辑了这些文件以完成我的工作。一旦我的项目的早期部分不再可见,我就致力于 git(带有注释“地图搜索的东西呈现不可见”),致力于 SVN,并将 SVN 内容推送到暂存。所以现在登台/测试服务器上没有我的东西和他的所有东西,这很好。

几天后,我在我的map-dev分支中进行了开发,我的同事向 SVN 签入了一些不会真正影响我正在做的事情的东西,但我想保持同步。

git checkout master。我svn up。我git commit -a评论“从 SVN 更新”。

map-dev现在我想,好吧,用 master 中的这些变化进行rebase ,对吧?所以我这样做了,我解决了一两个冲突,一切看起来都很笨拙。然后我注意到我提交的master名为“地图搜索内容呈现不可见”的更改是最新的。在我的 dev 分支上没有更新的提交,这就是第一次提交 repo 时的情况。

所以。我曾经git revert --hard ORIG_HEAD回到 rebase 之前的位置。我想要的是我刚刚放入的 CSV 更改,master而不是使我的工作不可见的提交。我该怎么做?

0 投票
6 回答
40026 浏览

git - 删除/修改冲突后 Git rebase 将不会继续

我正在将我的主人变基到舞台分支

有时我删除了两个文件,然后根据 GIT 修改了这两个文件。

我想说“是的 git,继续删除这些文件”所以....

吉特说:

我说“别叫我‘笨蛋’,照我说的做!”

我们现在处于对峙状态。谁是对的,我该如何解决?

0 投票
5 回答
13205 浏览

git - 重新定位一个分支,包括它的所有子分支

我有以下 Git 存储库拓扑:

通过feature变基分支,我希望变基整个子树(包括子分支):

然而,这是实际结果:

我知道我可以很容易地通过执行手动修复它:

但是有没有办法自动变基分支,包括它的所有子/后代?

0 投票
2 回答
6889 浏览

git - 当 git rebase 两个具有一些共享历史的分支时,有没有一种简单的方法可以让共同的历史保持通用?

假设我们有以下修订图:

A 在 B 和 C 之前。进一步假设我从上游变基 A,创建一个新的提交 A*,然后将 B 和 C 变基到 A*。生成的修订图如下:

请注意,共享历史不再共享。有没有一种简单的方法来解决这个问题,比方说,重新定位 B 然后明确地将 C 重新定位到 Z' 上。换句话说,是否有更好的方法可以同时自动重新设置多个分支以保留共享历史记录?不得不人为地在分割点放置一个标签,或者手动检查图表以找出提交的 sha1 以重新设置 C 以保留共享历史,这似乎有点尴尬,更不用说打开可能性了错误,特别是因为我每次变基时都必须这样做,直到我将更改检查到上游分支。

0 投票
2 回答
2777 浏览

git - git:如何将某个作者的所有提交重新设置为单独的分支?

我正在使用一些没有使用 SCM 的代码+并以所有项目文件的形式接收偶尔的更新,尽管只有其中一些只做了一点更改。到目前为止,我只是将自己的更改放入 git repo 并通过手动git add -p会话解决了这些“更新”,随着我自己的更改(尚未确定发布的更改)的数量越来越多,这变得越来越烦人,由于幸运的是我git commit --author "the others"为上述“补丁”做了,我想知道:

一个作者的所有提交如何被分离到一个新的分支中?

(我不介意在这种情况下重写历史,repo 仅供我使用)

理想的解决方案将包括在每个“补丁”之后将其他分支合并到我的分支中,但现在最后的最终合并可能就足够了。


+是的,绝地确实觉得你在那里畏缩