gpt4 book ai didi

Git rebase而不是merge,正确的方法是什么?

转载 作者:行者123 更新时间:2023-12-05 01:35:57 24 4
gpt4 key购买 nike

我想通过使用 rebase 而不是 merge 来避免在我的远程存储库上重复出现分支交叉点。

为了让您更好地理解我想要实现的目标,请考虑以下情况:

$ git lg
* 2345678 hotfix (HEAD -> master)
* 1234567 foo (origin/master, origin/HEAD)

$ git push
! [rejected] master -> master (fetch first)

$ git fetch
$ git lg
* 2345678 hotfix (HEAD -> master)
| * 3456789 other change (origin/master, origin/HEAD)
|/
* 1234567 foo

通常,解决此问题的标准方法是 merge 后跟 push

$ git merge origin/master
$ git lg
* 4567890 Merge remote-tracking branch 'origin/master'
|\
* | 2345678 hotfix (HEAD -> master)
| * 3456789 other change (origin/master, origin/HEAD)
|/
* 1234567 foo
$ git push

我不喜欢这种解决方案,因为在这种特殊情况下我可以轻松避免分支。所以,让我们用 git reset --hard head~1 恢复更改并尝试另一种解决方案:

$ git rebase origin/master
First, rewinding head to replay your work on top of it...
Applying: hotfix

$ git lg
* 2345678 hotfix (master)
| * 5678901 hotfix (HEAD)
| * 3456789 other change (origin/master, origin/HEAD)
|/
* 1234567 foo

现在是令人不快的部分,我必须将我的 master 移回其 HEAD:

$ git branch -D master
$ git checkout -b master
$ git push
$ git branch --set-upstram-to=origin/master master
Branch master set up to track remote branch master from origin.
$ git lg
* 5678901 hotfix (HEAD -> master, origin/master, origin/HEAD)
* 3456789 other change
* 1234567 foo

我的问题是如何简化我的 rebase 并避免不愉快的部分?

最佳答案

我认为最简单的方法是更改​​您的 pull 工作流程。这里有几个选项。

首先,可以使用--rebase标志 pull

git pull --rebase

根据文档,git pull 在其默认配置中执行 fetch 后跟 merge。使用 --rebase 标志会将 merge 替换为 rebase :)

其次,您可以使用 git pull

设置默认值以始终执行此操作
git config --global pull.rebase true

我会推荐第一种方法,因为设置 rebase 的默认值会让我感到紧张。我为 git pull --rebase 创建了一个别名 git pr 以使其更容易。这样我就可以在每次 pull 时做出决定。

关于Git rebase而不是merge,正确的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35630223/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com