标签: git-rebase

Git:使用rebase应用主题分支(不合并)

我想在我的主人身上申请一个小主题分支(在贡献者的远程仓库上).我认为这样做的规范方法是:

git merge contributor/topic-branch
Run Code Online (Sandbox Code Playgroud)

但是我希望逐个应用提交而不是生成合并提交.

天真地运行git rebase contributor/topic-branch显然不会起作用,因为它将我的主应用主题分支,就好像主题分支是我的上游.所以我尝试了这个:

git rebase master contributor/topic-branch
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,除了现在我有一个独立的HEAD,我需要修复master分支指向HEAD(使用branch -f).我当然可以编写一个Bash函数来自动执行此操作,但是有没有"正确"的方法来引入主题分支而不使用merge

git git-rebase branching-and-merging git-branch

2
推荐指数
1
解决办法
5196
查看次数

重新绑定所有未合并的提交

我经常发现自己愿意(交互式地)重新绑定当前工作分支中未合并到master的所有提交.我该如何做到这一点?

首选基于git命令/参数的解决方案(我在使用Bash的Linux和使用PowerShell的Windows上都使用git).

git rebase git-rebase

2
推荐指数
1
解决办法
433
查看次数

当我使用 rebase 执行 git pull 时,如何禁用 rebase 挂钩?

命令:

git rebase --no-verify
Run Code Online (Sandbox Code Playgroud)

...允许我在不运行我创建的 git rebase 挂钩的情况下进行变基。

但我还将git pull设置为 rebase 而不是合并,所以现在当我执行 pull 时,它会运行我的 rebase 触发器。有没有办法将 --no-verify 选项传递给 git pull 并让它在变基时使用该选项?

(除了创建包装脚本以暂时将触发器移开,然后再将它们移回的最后手段之外)。

git git-pull git-rebase githooks

2
推荐指数
1
解决办法
5068
查看次数

中止变基后如何应用自动存储?

我已在 my 中rebase.autoStash设置为,这允许我在脏工作树上运行。但是,如果 a由于某种原因中止,则对跟踪文件的所有更改都将消失(即不会重新应用自动存储)。在这种情况下应用自动存储的正确方法是什么?'true'.gitconfigrebaserebase

如何重现:

  • 运行git config rebase.autostash true
  • 编辑一些跟踪文件。
  • 运行git rebase -i HEAD^^^。这会打印如下内容:

    Created autostash: 75a5188
    HEAD is now at f0c93f1 WIP
    
    Run Code Online (Sandbox Code Playgroud)
  • 中止变基,例如让编辑器以错误代码退出(:cq在 Vim 中)。

git rebase git-stash git-rebase

2
推荐指数
1
解决办法
692
查看次数

为什么"rebase --onto ABC"与"rebase ABC"不同?

使用git 2.11,git rebase文档说:

如果提供了--onto选项,则当前分支将重置为<upstream>或<newbase>.这与git reset --hard(或)具有完全相同的效果.ORIG_HEAD设置为在重置之前指向分支的尖端.

我理解它upstream并且newbase指向相同的"基本引用",这意味着下面的两个rebase语法是等价的:

git rebase ABC
git rebase --onto ABC
Run Code Online (Sandbox Code Playgroud)

这是我设置的演示.让我们假设当前分支是FeatureABC与远程分支完全同步.

#---create two identical branches, behind current branch by 5 commits
(FeatureABC) git branch Demo1-Rebase-ABC      HEAD~4
(FeatureABC) git branch Demo2-Rebase-onto-ABC HEAD~4

#---Make a new commit in branch Demo1
git checkout Demo1-Rebase-ABC
echo "Demo of: git rebase FeatureABC Demo1-Rebase-ABC" > ./Demo1_BogusFile.txt
git add ./Demo1_BogusFile.txt
git commit -m "Create file Demo1_BogusFile.txt"

git rebase FeatureABC
Run Code Online (Sandbox Code Playgroud)

首先,倒带头重播你的工作
...应用:创建文件Demo1_BogusFile.txt

git log --oneline -3 …

git git-rebase

2
推荐指数
1
解决办法
688
查看次数

如何修复级联分支变基混乱

我们有一个工作流程,其中只有一名团队成员在多个功能分支上工作。工作是这样的,下一个分支都依赖于他之前所做的分支。默认分支是develop.

我们来说说这个场景:

  1. 他创建featureA分支,完成工作,推送分支,并在 GitHub 上创建 PR
  2. 他创建featureB分支(基于featureA一个分支),进行工作并进行公关
  3. 他创建featureC分支,(基于featureB)做工作并公关它
  4. 他创建featureD分支,(基于featureC)做工作并公关它

尚未合并任何 PR。

现在,项目经理介入并开始合并。合并走这样的路:

  1. 项目经理并入featureA开发
  2. 他这边的开发人员这样做:

    git checkout develop
    git fetch origin
    git rebase origin/develop
    git checkout featureB
    git rebase origin/develop
    git push origin featureB
    
    Run Code Online (Sandbox Code Playgroud)

此时我们得到错误:

machine /c/Work/ (featureB)
$ git push origin featureB
To https://github.com/x.git
 ! [rejected]        featureB -> featureB (non-fast-forward)
error: failed to push some refs to 'https://github.com/x.git'
hint: Updates …
Run Code Online (Sandbox Code Playgroud)

git github git-rebase

2
推荐指数
1
解决办法
865
查看次数

git rebase 通过提交提交

我有一个包含 10 个提交的分支。现在 master 更改了,我想将我的分支重新设置为新 master 的 HEAD。然而,一些新的主提交甚至使我的分支的第一次提交无法编译(没有合并冲突)。如果您的所有提交最终都无法编译,那么重新设置分支对我来说似乎毫无意义。

我想要做的是告诉 get “做一个 rebase,但在从我的分支重新设置每个提交后等待”。这样,我可以检测每次提交后代码是否仍然编译,使其编译(如果需要),然后提交并继续。

这可能吗?是否有干净的变基替代方案,以便每次提交仍将编译?

git git-rebase

2
推荐指数
1
解决办法
1707
查看次数

如何执行本地提交的 git rebase

一个常见的场景是在推送到存储库之前执行本地 git 提交的交互式 rebase。一种方法是找到本地提交的数量并运行命令(在本例中为 3 个本地提交)

git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)

有没有什么办法可以省去事先找出本地提交次数的需要,直接运行一个命令,意思是git rebase -i 'commits not yet pushed'.

编辑:让我通过给出一个特定的场景来详细说明。我执行三个提交:

Commit change A
Commit change B
Commit change C
Run Code Online (Sandbox Code Playgroud)

此时我意识到C中的变化属于A中的变化,所以我想rebase给我我想要的:

Commit containing A + C
Commit containing B
Run Code Online (Sandbox Code Playgroud)

在这一点上,没有任何推动。看到我不记得变化 C 有多少变化,我做了一个

git log @{u}..
Run Code Online (Sandbox Code Playgroud)

并确定我有三个变化。所以现在我想做一个

git rebase -i HEAD~3
Run Code Online (Sandbox Code Playgroud)

或者,正如@cosimo93 指出的那样,我可以简单地做

git rebase -i
Run Code Online (Sandbox Code Playgroud)

git git-rebase

2
推荐指数
1
解决办法
3347
查看次数

重新排序本地提交

我想在我的本地分支重新排序 git 提交,目前,我的分支看起来像这样。

xxxxxxx-0-1-2-3

现在我想将顺序更改为以下

xxxxxxx-0-2-1-3 怎么用git来做呢?

git git-rebase

2
推荐指数
1
解决办法
2926
查看次数

`git pull --rebase --autostash` 和 `git pull --ff-only` 之间的区别?

以下问题Can “git pull” automatically stash and pop pending changes有使用两者的解决方案:

  • git pull --rebase --autostash

  • git pull --ff-only

我有点困惑我应该使用哪个。他们真的完成了相同的结果吗?提出了非常相似的问题,其中没有--autostash参数以及--rebase

git git-pull git-rebase

2
推荐指数
1
解决办法
484
查看次数