Bitbucket: 远程仓库冲突,无法解决的问题

8
我希望我可以正确地表达...我在Bitbucket中有以下设置(使用Git协议)。我有一个主仓库,其中包含我的应用程序。然后,我为每个客户创建一个主分支以拥有灵活性,在不影响主分支的情况下进行特定于客户的更改。当需要一般更改时,我会推送到主分支,然后将其与分支同步,并在生产环境中进行拉取。
我的问题是,在Bitbucket中,它显示我有合并冲突,但我不知道如何解决它们。本地上没有冲突。当我进入Bitbucket时,它告诉我我落后于主仓库2个提交,所以我点击同步。它说有合并冲突,我需要解决它们。然后,我找不到解决这些冲突的方法。如果我在生产服务器上执行pull,则会提示冲突,要求我解决它们,所以我解决了。我使用nano(因为我讨厌VIM)清除我需要的内容,然后继续工作。但是分叉的仓库似乎仍然存在冲突。我不知道我需要做什么才能解决这种情况。无论如何,它让我陷入停滞状态,因为在解决冲突之前我无法推送更多的更改到分叉仓库。

你是否拥有每个代码库的本地副本?在本地解决合并冲突,然后再推送更改是最简单的方法。 - Chris
我有一个本地副本,是的。但是我在本地仓库中没有看到任何冲突。我该如何让合并冲突在本地显示,以便我可以解决它并推送回去? - Siraris
当你说你已经fork了存储库时,这是一个真正的fork(一个单独的存储库),还是主存储库中的一个分支?如果你有多个存储库,你是否拥有每个存储库的本地副本? - Chris
这是一个分叉的存储库。因此,如果我有主存储库,我会分叉客户端A存储库。当我尝试在Bitbucket中同步客户端A(即将客户端A与主存储库同步)时,它会显示合并冲突,但是我看不到任何Bitbucket内置工具可以帮助我解决冲突。 - Siraris
1个回答

11

在使用fork时,将上游仓库(即主要的存储库)配置为远程仓库以及fork(即客户端A的存储库)通常会很有帮助。例如,您可能已经有一个代表fork的origin

添加一个新的远程仓库upstream来代表“Master”仓库:

git remote add upstream git@bitbucket.org:user/master-repo.git
git fetch upstream

现在你应该能够看到所有相关的分支。比如,如果你正在尝试合并master分支,那么下面这些分支就是相关的:

  • master(本地)
  • origin/master(客户端A)
  • upstream/master(主存储库)

如果你使用gitkgit log --all --graph --decorate可视化这些分支,你可能会看到冲突来自哪里。最有可能的情况是你想将两个远程分支的更改合并到你的本地master分支中:

git checkout master
git merge upstream/master  # (Merge changes from the "Master" repo)
# Fix any merge conflicts that may arise
git merge origin/master    # (Merge changes from the Client A repo)
# Fix any merge conflicts that may arise

完成此操作后,您应该能够干净地将代码 pushorigin

git push origin master

使用rebase到上游分支,然后在本地解决任何冲突不是更好吗? - Siraris
好的,在重新阅读您写的内容后,我认为您建议的是我想要的。不过有一个问题,如果我执行git merge upstream/master,然后再执行git merge origin/master,它会将我的分支合并到主分支中,还是只会将主分支合并到我的分支中?我想将主分支的更改合并到我的分支中,但我不想将我的分支更改合并到主分支中。 - Siraris
在这个过程中,upstream/master 上的内容不会发生任何改变。您将使用来自 upstream/master 的更改更新 master,然后使用 origin/master 更新 master,因此 master 将包含来自您的主存储库和分支的更改。此时测试 master 并确保一切按照您的预期工作是个好主意。然后您将推送到 origin(您的分支)。这将导致从 upstream/master 更新您的分支。 - Chris
是的! 我为“主”仓库以及客户端子仓库都创建了代码库。因此,“主”仓库的任何更改都将通过本地副本进行,我只需使用您在此处提供的方法在本地合并更改即可。我打算试一试。如果成功了...我就欠你一个人情。 - Siraris
还有一件事...每次合并时,我需要获取上游的最新代码吗?还是直接执行检出->合并->合并->推送即可? - Siraris
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接