为什么拉取请求在变基后显示额外提交?
Why does a pull request show extra commits after a rebase?
所以我从一个 pull request 开始,它比 develop
提前了几次提交,我们称这个分支为 feature
.
feature
与开发有 1 次合并冲突。所以我决定对其进行变基并解决冲突。
git checkout develop
git pull
git checkout feature
git pull
git rebase develop
- 合并冲突已修复 - 添加了新提交
git rebase --continue
- 变基成功。
git push
(我实际上是在使用“同步更改”)
完成这些步骤后,gitHub 上的 PR 从 7 次提交变成了 60 多次提交。
我原以为它只会提交 7 次到 8 次,因为我解决了一个冲突。
知道发生了什么以及如何(如果需要)解决它吗?
如果需要,我可以 post 其他信息
编辑,这就是我遇到问题的原因:
仔细检查您是从控制台使用 git push --force
,而不是使用 vscode 中的 git sync
按钮:
REBASE 后永不同步
改用git push --force
!
问题可能是您的 feature
分支可能已从某个不同的分支签出,比方说 test
,这已经有很多提交了。因此,即使你从你提出反对的同一个分支重新建立基础,你也会得到提交不一致。要解决这个问题,我知道的一种方法是,从 develop 分支创建一个新分支,然后从 feature
分支中挑选你们所有的提交。
查看您的分支机构的 git 日志并尝试找出任何异常之处。
一条评论提到使用 git log
,但您也可以使用 git log --graph --oneline
来直观地表示您的分支的提交历史记录。如果您的分支正确地重新定位,您会看到类似以下内容的内容:
* 5eccc30d1 (HEAD -> feature, origin/feature) # Your commit message 8
* 5f73d262a # Your commit message 7
* 6c636b744 # Your commit message 6
* 97e17a7cf # ...
* 596297507 # ...
* 4646ce633 # ...
* 9fb61eb95 # ...
* 38dab17ae # Your commit message 1
* 7532142f7 (origin/develop) Merge pull request #...
|\
| * 042303c7e Add feature
* | 008f1e53b Merge pull request #...
|\ \
| * | 5a398f715 Fix issue with #...
# And so on
与此进行比较,并尝试找出任何异常之处。你第一次提交下面的提交应该是你的基础分支,你写的那些之间不应该有任何提交。
我怀疑在您的功能分支中使用 git pull
可能存在问题。如果您自己正在处理此 PR,则没有理由这样做,因此可能会出现问题。
如果您需要拉取您的功能分支,请尝试使用 git pull --rebase
代替,这等同于获取和变基,而不是获取和合并。这确保您的本地提交保持在您的历史记录之上,以防您的本地分支和您的来源之间存在差异。
这是可能发生的想法。
当您继续将提交添加到将变基的分支时,可能会发生这种情况。
假设我们有两个分支 master
和 dev
.
master A-B-C
|
dev D-E-F
现在我们推送dev
审核。
等审核的时候又有新任务了。分支 dev
获得新提交,因此在本地看起来像:
dev A-B-D-E-F-G
注意分支 dev
中没有 C 提交。之后您的拉取请求被接受并且您远程(例如在 github 中)将您之前的更改重新设置为 master
:
master A-B-C-D'-E'-F'
到那时你已经有了分支 master
,其中复制了 D'-E'-F' 提交,从 C 提交开始。
但是你的本地 dev
不同,它没有 D'-E'-F' 因为它有 D-E-F。更何况它还没有C提交。
master A-B-C-D'-E'-F'
dev A-B-D-E-F-G
现在您又想使用变基将提交 G 添加到 master 中。
两个分支的公共部分是 A-B。所以当你重新开始时,git 不承认 D' 和 D 是相同的,因为它们从不同的点开始(对于 dev
它从 B 开始,对于 master
它从 C 开始) .因此,在新拉取请求的预览中,您不仅会看到提交 G,还会看到 D-E-F。
所以我从一个 pull request 开始,它比 develop
提前了几次提交,我们称这个分支为 feature
.
feature
与开发有 1 次合并冲突。所以我决定对其进行变基并解决冲突。
git checkout develop
git pull
git checkout feature
git pull
git rebase develop
- 合并冲突已修复 - 添加了新提交
git rebase --continue
- 变基成功。
git push
(我实际上是在使用“同步更改”)
完成这些步骤后,gitHub 上的 PR 从 7 次提交变成了 60 多次提交。
我原以为它只会提交 7 次到 8 次,因为我解决了一个冲突。
知道发生了什么以及如何(如果需要)解决它吗?
如果需要,我可以 post 其他信息
编辑,这就是我遇到问题的原因:
仔细检查您是从控制台使用 git push --force
,而不是使用 vscode 中的 git sync
按钮:
REBASE 后永不同步
改用git push --force
!
问题可能是您的 feature
分支可能已从某个不同的分支签出,比方说 test
,这已经有很多提交了。因此,即使你从你提出反对的同一个分支重新建立基础,你也会得到提交不一致。要解决这个问题,我知道的一种方法是,从 develop 分支创建一个新分支,然后从 feature
分支中挑选你们所有的提交。
查看您的分支机构的 git 日志并尝试找出任何异常之处。
一条评论提到使用 git log
,但您也可以使用 git log --graph --oneline
来直观地表示您的分支的提交历史记录。如果您的分支正确地重新定位,您会看到类似以下内容的内容:
* 5eccc30d1 (HEAD -> feature, origin/feature) # Your commit message 8
* 5f73d262a # Your commit message 7
* 6c636b744 # Your commit message 6
* 97e17a7cf # ...
* 596297507 # ...
* 4646ce633 # ...
* 9fb61eb95 # ...
* 38dab17ae # Your commit message 1
* 7532142f7 (origin/develop) Merge pull request #...
|\
| * 042303c7e Add feature
* | 008f1e53b Merge pull request #...
|\ \
| * | 5a398f715 Fix issue with #...
# And so on
与此进行比较,并尝试找出任何异常之处。你第一次提交下面的提交应该是你的基础分支,你写的那些之间不应该有任何提交。
我怀疑在您的功能分支中使用 git pull
可能存在问题。如果您自己正在处理此 PR,则没有理由这样做,因此可能会出现问题。
如果您需要拉取您的功能分支,请尝试使用 git pull --rebase
代替,这等同于获取和变基,而不是获取和合并。这确保您的本地提交保持在您的历史记录之上,以防您的本地分支和您的来源之间存在差异。
这是可能发生的想法。
当您继续将提交添加到将变基的分支时,可能会发生这种情况。
假设我们有两个分支 master
和 dev
.
master A-B-C
|
dev D-E-F
现在我们推送dev
审核。
等审核的时候又有新任务了。分支 dev
获得新提交,因此在本地看起来像:
dev A-B-D-E-F-G
注意分支 dev
中没有 C 提交。之后您的拉取请求被接受并且您远程(例如在 github 中)将您之前的更改重新设置为 master
:
master A-B-C-D'-E'-F'
到那时你已经有了分支 master
,其中复制了 D'-E'-F' 提交,从 C 提交开始。
但是你的本地 dev
不同,它没有 D'-E'-F' 因为它有 D-E-F。更何况它还没有C提交。
master A-B-C-D'-E'-F'
dev A-B-D-E-F-G
现在您又想使用变基将提交 G 添加到 master 中。
两个分支的公共部分是 A-B。所以当你重新开始时,git 不承认 D' 和 D 是相同的,因为它们从不同的点开始(对于 dev
它从 B 开始,对于 master
它从 C 开始) .因此,在新拉取请求的预览中,您不仅会看到提交 G,还会看到 D-E-F。