【问题标题】:Git (GitLab) - Merge Fails - Trying instructions for "Check out, review, merge locally"Git (GitLab) - 合并失败 - 尝试“在本地签出、查看、合并”的说明
【发布时间】:2018-12-13 19:59:20
【问题描述】:

我尝试从我的用户分支合并到我们共享的“开发”分支。我是这个项目的唯一工作人员。 GitLab 给了我以下我正在努力解决的指令。

在第 1 步中 - 当我执行“git fetch origin”时 - 我是在存储库中执行的,我已经在我的硬盘驱动器上。那是正确的吗?如果我在一些新创建的目录中尝试它,它会显示为“致命:不是 git 存储库(或任何父目录):.git

对于第 1 步的第二部分 - 我得到错误: 致命:分支名称“nw-ob210refactor”已经存在。

所以我尝试在末尾添加一个 2,但我得到了这个错误: 致命:'origin/nw-ob210refactor2' 不是提交和分支'nw-ob210refactor ' 不能从它创建

GitLab 的上述说明是否完整且正确;还是我在做一些明显错误的事情。

【问题讨论】:

    标签: git gitlab merge-conflict-resolution


    【解决方案1】:
    git checkout -b localName origin/onlineName
    

    创建一个新的本地分支。见man git checkout

    -b“新分支”
    创建分支“new_branch”并从“start_point”开始;如果它已经存在,则将其重置为“start_point”。这相当于用“-f”运行“git branch”;详见 git-branch(1)

    如果您已经在本地拥有相应的分支,您当然不想再次创建它。而是只使用

    git checkout nw-ob210refactor
    

    git pull
    

    如果我在一些新创建的目录中尝试它

    你必须做一个新鲜的

    git clone https://your/repository
    

    首先下载您的存储库

    所以我尝试在末尾添加一个 2,但我得到了这个错误:致命:'origin/nw-ob210refactor2' is not a commit and a branch 'nw-ob210refactor' cannot be created from it

    如果您想创建一个新的本地分支,则必须更改 -b(= 本地 brnach 名称)之后的参数,而不是您尝试下载的来源(远程分支名称):

    git checkout -b checkout nw-ob210refactor2 origin/checkout nw-ob210refactor
    

    更新

    一旦你成为Already up to date,继续第 3 步

    也可以去那里

    git checkout -b develop origin/develop
    

    如果develop 分支目前在本地存在。否则再次仅使用

    git checkout develop
    

    只切换到它。在那种情况下一定要再次运行

    git pull
    

    现在您拥有本地分支和最新分支,并准备好合并

    git merge --no-ff nw-ob210refactor
    

    这会将nw-ob210refactor 合并为develop。如果您需要它,只需切换到目标分支 (checkout) 并交换名称即可。

    --no-ff 读作no fast forward 表示

    即使合并解析为快进,也要创建合并提交。这是合并未存储在 refs/tags/ 层次结构中的自然位置的带注释(可能还有签名)标签时的默认行为。

    或者简单来说,您想要创建一个特殊的提交,该提交将包含消息merge from branch nw-ob210refactor into develop,即使没有冲突,您实际上可以合并分支而无需额外提交。这对于更好地了解历史记录中合并的内容并在以后需要时更容易恢复内容非常有用。


    合并后推回您合并到的相应分支。在这个例子中它是develop 所以这样做

    git push origin develop 
    

    【讨论】:

    • 谢谢,将我所做的添加到其他类似的答案中。
    • 谢谢,在你的帮助下应付过去。我确实认为 GitLab 给出了一些错误的命令...
    • 很高兴为您提供帮助!好吧,他们并不“坏”,但显然他们只是假设你已经有 develop local 但 nw-ob210refactor 没有
    • 我们有标准的分支开发、发布 (QA) 和主 (PROD)。所以现在,当我将固定的开发分支合并到发布时,我必须再次使用相同的繁琐程序,然后可能再次将其发布到主分支。我真的不知道我是怎么开始不同步的。
    • 好吧,一旦你向一个分支提交了一些东西,你总是必须在必要时将这种新的艺术状态合并到所有其他分支中(至少向上)。这就是它的工作原理。一个好的做法是在开始开发之前始终从 master 向下合并,这样您就至少拥有最新的状态,并且不会再次进行一些可能已经提交到远程分支的修复。同时,在开发过程中,如果最近发生了一些事情,您会不时从 master 中合并,以确保您的本地版本以后不会与 master 上的内容发生制动/碰撞
    【解决方案2】:

    您的git fetch origin 是正确的。这将从名为origin 的远程获取最新的参考。现在,当您尝试签出时,很可能您已经拥有该名称的分支(甚至可能与远程提交相同)。

    只是为了确保,您应该在切换到分支后pull

    git checkout nw-ob210refactor
    git pull
    

    然后转到第 2 步。


    注意您可以创建第二个分支来引用这个远程分支,但我认为没有必要。如果您对如何让“添加 2”方案工作感到好奇,您必须将其添加到本地分支名称,而不是远程分支名称:

    git checkout -b nw-ob210refactor2 origin/nw-ob210refactor
    

    【讨论】:

    • 在现有存储库中,尝试了“git checkout nw-ob210refactor”,它说“已经在'nw-ob210refactor'上你的分支是最新的'origin/nw-ob210refactor”。无论如何,我做了“git pull”,说“已经是最新的”。那么接下来呢?我现在要跳到第 3 步合并吗? GitLab 的说明有误吗?
    • 您的结帐是无操作的,因为已经在分支上。您的拉动是无操作的,因为您已经在分支的负责人。成功。仍然可以继续执行第 2 步,但因为您已经在树中进行了适当的修订,您可能知道该提交中的更改。转到第 3 步。GitLab 说明没有错,只是不完整。它们在尚未检查该分支的系统上完美运行(即有人进行同行评审)。他们应该添加关于原始开发人员指令差异的注释。
    猜你喜欢
    • 2020-04-30
    • 2013-09-12
    • 2018-03-01
    • 2018-09-10
    • 2020-11-26
    • 2014-04-14
    • 2021-10-27
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多