git - 如何与远程分支的父分支保持同步

标签 git

我想让主题分支与其父分支保持同步。这与使用 rebase 到父分支的本地主题分支非常有效:

git checkout topic
git rebase master

但是,如果主题是远程分支,那么 rebase 到 master 似乎与 checkin 远程分支有冲突。

跟上远程分支中 master 更改的最佳方法是什么。

这是我一直在做的事情。在将远程分支 rebase 为 master 时,我似乎总是以多重冲突和多个“分支”告终。

我在处理远程分支时使用标准结构:

git checkout master
git checkout -b topic
git push origin topic
git branch --set-upstream topic origin/topic

我会继续研究主题、进行提交并推向原点。

# edit some files
git commit -a
git push

有时 master 已更新,我需要将这些更改 merge 到我的主题分支中。

git checkout master
git pull
git checkout topic
git rebase master

太棒了。现在推送该更新。

$ git push
To git@github.com:duane/branchtest.git
 ! [rejected]        topic -> topic (non-fast-forward)
error: failed to push some refs to 'git@github.com:duane/branchtest.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes (e.g. 'git pull') before pushing again.  See the
'Note about fast-forwards' section of 'git push --help' for details.

奇怪的是,日志看起来像这样:

$ git log --graph --format=oneline
* 31f4b133a4a9983528ba309e6c161e09e8061f84 Change 1 for topic 2.
* 2dc45b91856748a9c6adaf3579a7b8b2cf90a6ae Change 3 for file1.
* db97959ec75267bf94d97af6e8b2a8a762c61b25 Add topic2.txt.
* 08e6cc4b14a23dad86c2d283ee4acc1cebc775ef Change 2 for file1.
* e707b9571b2aa4d01073f156abb407fec15a195a Change 1 for file1.
* 2002670efda4d8c83150a4cc1c25fac62e37814d Add file1.txt.
* d3a6eae43e4824f455872622491c2ca861f96d4f Begin the repo.
$ git pull
Merge made by recursive.

然后看起来像

$ git log --graph --format=oneline
*   18ba5265e2836e1a7884341dbedb8b2cc8ab9727 Merge branch 'topic' of github.com:duane/branchtest into topic
|\  
| * 0e5f3022c7f087ed4dd70d11a0cba250300be05e Change 1 for topic 2.
* | 31f4b133a4a9983528ba309e6c161e09e8061f84 Change 1 for topic 2.
* | 2dc45b91856748a9c6adaf3579a7b8b2cf90a6ae Change 3 for file1.
|/  
* db97959ec75267bf94d97af6e8b2a8a762c61b25 Add topic2.txt.
* 08e6cc4b14a23dad86c2d283ee4acc1cebc775ef Change 2 for file1.
* e707b9571b2aa4d01073f156abb407fec15a195a Change 1 for file1.
* 2002670efda4d8c83150a4cc1c25fac62e37814d Add file1.txt.
* d3a6eae43e4824f455872622491c2ca861f96d4f Begin the repo.

主题 2 的更改 1 是我所做的更改。它现在被列出两次。

当然,推送最终会在我的远程主题分支上造成困惑。

一个更大的问题是,每次 rebase 到 master 时,都会重复这个额外的 merge 点;即使 master 没有任何变化!

我哪里错了?如何在维护远程分支的同时与 master 分支保持同步?

最佳答案

如果我理解正确,您希望远程主题分支完全反射(reflect)您的本地分支,但更改仅在您的本地计算机上完成?

在那种情况下,只要您对主题分支进行本地更改,就应该git push --force。但是,如果您要与其他任何人共享您的主题分支,则不应这样做。在这种情况下,您应该跳过 rebase 并只从 master 执行 merge 以保持最新。它不那么“漂亮”,但更可靠。

关于git - 如何与远程分支的父分支保持同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669288/

相关文章:

eclipse - .git 本地存储库是否必须包含在本地工作目录中?

java - 无法将 Eclipse 项目克隆到工作区

git - 我应该将外部库的 TypeScript 定义文件检查到 git 中吗?

windows - 在 Windows 存储库中使用 Linux 行结尾的 .git/config 语法是什么?

git - 找不到 Composer 包

git - 使用 git pull 特定版本

git 将上游设置为原点

git - 推送后删除敏感数据

Git 子模块是脏的?

linux - 通过 SSH 进行 Git pull