相关疑难解决方法(0)

需要Git rebase参数上下文解释

经常git rebase在某个分支的上下文中使用.例如,如果我想在feature分支的顶部移动分支的基础master(基于最新的提交) - 教程说:

git checkout feature
git rebase master 
Run Code Online (Sandbox Code Playgroud)

在这样的教程之后,有很多问题.例如:如何在不签出的情况下执行相同的操作.如何使用--onto选项执行相同的操作.--onto和rebase 之间有什么区别.我可以通过一系列提交,还是必须是整个分支?等等..

我已多次阅读man page但仍有很大的差距.

所以主要问题是: git如何解析不同场景中的args以及我应该如何解释/想象它们在我脑海中?例如:

git rebase master
git rebase feature master
git rebase --onto master feature
git rebase HEAD~4 HEAD~2
git rebase --onto HEAD~4 HEAD~2
Run Code Online (Sandbox Code Playgroud)

我们假设我们有以下回购:

Z -- W (HEAD, test-branch*) 

A -- B -- C -- D -- E (master)
     \
      1 -- 2 -- 3 (feature)

test-branch is checked out.
Run Code Online (Sandbox Code Playgroud)

git github

5
推荐指数
1
解决办法
335
查看次数

修改后rebase分支?

是否可以重新建立修改后的提交并让 git 自动跳过旧版本的提交?

动机:Gerrit 补丁集

对于 Gerrit,通常需要在未通过自动或人工代码审查后修改提交。但修改后,还需要对此后所做的更改进行rebase,这是一个容易出错的过程。

How to git commit --amend a commit that's the base of abranch 中,给出了手动省略修改的提交的选项,但由于问题不要求自动化,因此没有建议这样的解决方案。

例子

假设我需要推送提交D以供审核,但已经进行了进一步的更改,尚不适合推送。

A---B---C(origin/master)---D---E---F(devel)

>>> git push origin <hash-of-D>:refs/for/master
Run Code Online (Sandbox Code Playgroud)

现在假设远程构建失败,或者审阅者发现问题。Gerrit 要求推送更新的更改是单个提交,因此我需要更改提交。

对于简单的修改,我可以交互地重新设置开发分支

>>> git rebase origin/master devel
edit D
pick E
pick F

A---B---C(origin/master)---D'---E---F(devel)
Run Code Online (Sandbox Code Playgroud)

更一般地说,我可能需要将更改作为临时分支进行检查,或者我可能有多个开发分支。那时,此选项不再可用。相反,我可能会做类似的事情:

>>> git checkout -b amend <hash-of-D>
>>> ### Make some changes
>>> git commit --all --amend

A---B---C(origin/master)---D'(amend)
        |
        '---D---E---F(devel)

>>> git push origin HEAD:refs/for/master
Run Code Online (Sandbox Code Playgroud)

现在我需要变基,但由于 D 和 D' 重叠,自动合并可能会失败,或者撤消从 D 到 D' …

git rebase gerrit

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

标签 统计

git ×2

gerrit ×1

github ×1

rebase ×1