我想通过使用 arebase而不是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
Run Code Online (Sandbox Code Playgroud)
通常,解决此问题的标准方法是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
Run Code Online (Sandbox Code Playgroud)
我不喜欢这个解决方案,因为在这种特殊情况下我可以很容易地避免分支。因此,让我们恢复更改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
Run Code Online (Sandbox Code Playgroud)
现在是令人不快的部分,我不得不放弃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
Run Code Online (Sandbox Code Playgroud)
我的问题是如何简化rebase并避免不愉快的部分?
我认为最简单的方法是改变你的拉取工作流程。这里有几个选项。
一、可以用--rebaseflag拉
git pull --rebase
Run Code Online (Sandbox Code Playgroud)
根据文档,在其默认配置中git pull执行 afetch后跟 a merge。使用该--rebase标志将替换merge为rebase:)
其次,您可以设置默认值以始终执行此操作 git pull
git config --global pull.rebase true
Run Code Online (Sandbox Code Playgroud)
我会推荐第一种方法,因为设置默认的 rebase 会让我紧张。我创建了一个别名git pr为git pull --rebase,使其更容易。这样我就可以在每次拉动时做出决定。
| 归档时间: |
|
| 查看次数: |
849 次 |
| 最近记录: |