git 使用现有的本地提交创建分支

pra*_*sad 1 git branch

我已经开始在一个功能分支上工作并进行了一些更改和提交。但是我没有将这些更改推送到远程跟踪分支。但是现在我想创建一个单独的错误修复分支,以便我可以创建拉取请求。如何在不推送的情况下创建一个包含我在当前分支上所做的所有提交历史记录的新分支。

为了更清晰,我想添加提交图。 A ---B---C---D---E---G

所以我在 A 已经在远程的分支上进行了更改,并进行了本地提交 BCDEG。现在我希望新分支从A提交开始,所有本地提交 BCDEG 以便审查时我可以在现有功能分支提交A上创建新的拉取请求。

Dam*_*n D 5

鉴于你想改变

A` <-- A <-- B <-- C <-- D <-- E <-- G
^origin/feature                      ^HEAD, feature
Run Code Online (Sandbox Code Playgroud)

         -- B <-- C <-- D <-- E <-- G
        /                           ^HEAD, bug-fix
A' <-- A
^      ^feature
|
origin/feature
Run Code Online (Sandbox Code Playgroud)

首先,你需要创建你的分支

git branch bug-fix

这给了你图表

A' <-- A <-- B <-- C <-- D <-- E <-- G
^origin/feature                      ^ feature, bug-fix, HEAD
Run Code Online (Sandbox Code Playgroud)

注意你还在feature分支上,你只需要创建bug-fix分支,不要结账。

接下来,您需要feature使用resetA这里是提交的 SHA1 哈希值,您也可以使用相对HEAD位置)删除(B, C, D, E, G)上的提交:

git reset --hard A

注意您将丢失任何未提交的功能工作- 请reset在执行该命令之前了解该命令的危险。重置所做的只是“推送”指向feature提交 A的指针。

然后签出您的新分支并推送您的功能分支更改以获取拉取请求:

git checkout bug-fix
git push
Run Code Online (Sandbox Code Playgroud)

这为您提供了所需的图表:

         -- B <-- C <-- D <-- E <-- G
        /                           ^ HEAD, bug-fix
A' <-- A
       ^origin/feature, feature
Run Code Online (Sandbox Code Playgroud)