我已阅读 Git 社区手册的 Basic Branching and Merging 部分。
所以我跟随它并创建一个分支:experimental
。
然后我:
切换到实验分支 (git checkout experimental) 进行一堆更改 提交它 (git commit -a) 切换到 master 分支 (git checkout master) 进行一些更改并在那里提交 切换回实验性 (git checkout experimental) 合并 master 更改实验性(git merge master)有一些冲突,但在我解决它们之后,我做了'git add myfile'现在我被卡住了,我无法回到主人
当我做
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
我做到了:
$ git rebase --abort
没有正在进行的变基?
我做到了:
$ git add res/layout/socialhub_list_item.xml
$ git checkout master
error: Entry 'res/layout/my_item.xml' would be overwritten by merge. Cannot merge.
我该怎么做才能回到我的主分支?
git commit gf2n.cpp -m "Hand merge gf2n.cpp due to conflicts"
执行提交,结果是 fatal: cannot do a partial commit during a merge.
。当然,“部分提交” 似乎没有在 git 手册页的任何地方记录或讨论。在修复后执行 git merge
会导致 Please, commit your changes before you can merge.
多么糟糕的工具...
git merge --continue
。请参阅my answer below
当合并期间发生冲突时,您必须手动完成合并提交。听起来您已经完成了前两个步骤,即编辑有冲突的文件,然后对它们运行 git add
以将它们标记为已解决。最后,您需要实际提交与 git commit
的合并。届时,您将能够再次切换分支。
快速提示:您可以使用 git commit -am "your commit message"
同时对跟踪的文件执行添加和提交操作。 (来源:@vaheeds)
解决合并冲突后如何完成合并?
使用 Git 2.12(2017 年第一季度),您将拥有更自然的命令:
git merge --continue
如果您不想在继续/恢复合并时编辑消息:
git merge --continue --no-edit
如果 --no-edit
不起作用,正如 akseli 在 the comments 中报告的那样,您可以执行以下操作:
# Linux
GIT_EDITOR=true git merge --continue
# Windows
cmd /V /C "set "GIT_EDITOR=true" && git merge --continue"
您可以为这些命令定义别名。
请参阅 Jeff King (peff
) 的 commit c7d227d(2016 年 12 月 15 日)。
请参阅 Chris Packham (cpackham
) 的 commit 042e290、commit c261a87、commit 367ff69(2016 年 12 月 14 日)。
(由 {7 合并) } 于 commit 05f6e1b,2016 年 12 月 27 日)
合并:添加 '--continue' 选项作为 'git commit' 的同义词
教 'git merge' --continue 选项,该选项允许通过完成合并来“继续”合并。解决冲突后完成合并的传统方法是使用“git commit”。现在,像 'git rebase' 和 'git cherry-pick' 这样的命令有一个 '--continue' 选项,将这样的选项添加到 'git merge' 会呈现一个一致的 UI。
merge
没有 --no-edit
参数。 git commit --no-edit
工作得很好
万一你在合并/变基过程中卡住了,你总是可以
git reset --hard
将您的工作恢复到上次提交的状态。这将从工作树中丢失您的更改,因此如果您在合并之前进行了本地修改,它们将在此之后消失 - 这就是为什么当您进行本地修改时不开始合并是可取的。 :)
git reset --hard
丢弃未提交的更改
git merge --abort
,它没有丢失任何东西的风险?
只需git commit
它。
(可选)git abort
它:
I ran into a merge conflict. How can I abort the merge?
为了让合并更轻松,安装 kdiff3 并将其配置为合并工具。说明:http://doodkin.com/2016/05/29/git-merge-easy-github-this-branch-has-conflicts-that-must-be-resolved-use-the-command-line/
该页面包含此视频:https://www.youtube.com/watch?v=Cc4xPp7Iuzo
手动解决冲突后的下一步是:-
混帐添加。 git status (这将显示哪些命令是继续自动合并过程所必需的)[命令 git 建议,例如 git merge --continue、git cherry-pick --continue、git rebase --continue]
error: Failed to merge in the changes. Patch failed at 0001 ADD: _type to styleguide The copy of the patch that failed is found in: .git/rebase-apply/patch When you have resolved this problem, run "git rebase --continue". If you prefer to skip this patch, run "git rebase --skip" instead. To check out the original branch and stop rebasing, run "git rebase --abort".
git merge --continue
,这是我正在尝试做的,结果是 error: unknown option 'continue'
。我敢肯定您的答案是错误的,因为 git-merge
man page 没有列出它。你使用的是什么版本的 Git?我正在使用 git version 1.8.5.2 (Apple Git-48)
。我也尝试过使用 MacPorts git version 2.9.3
。
git commit
每当您使用命令 git merge brancha branchb
合并两个分支时,有两种可能性:
一个分支(比如说 brancha)可以通过另一个分支(比如说 branchb)通过遵循其提交历史来到达。在这种情况下,git 只需快进 head 以指向最近的分支(在这种情况下是 branchb)。 2.但是如果两个分支在某个较早的时间点发生分歧,那么 git 会创建一个新快照并添加一个指向它的新提交。因此,如果您正在合并的分支之间没有冲突,git 会顺利创建一个新的提交。
合并两个不冲突的分支后,运行 git log 以查看提交。
现在回到有趣的案例,当合并分支之间存在合并冲突时。我从页面 https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging 引用此内容
Git 没有自动创建新的合并提交。在您解决冲突时,它已暂停该过程。如果您想在合并冲突后的任何时候查看哪些文件未合并,您可以运行 git status
因此,如果存在合并冲突,您需要解决冲突,然后使用 git add filename
添加您对暂存区域所做的更改,然后使用由于冲突而被 git 暂停的命令 git commit
提交更改.我希望这能解释您的查询。也请访问上面的链接以了解详细信息。如有任何疑问,请在下面发表评论,我很乐意为您提供帮助。
解决冲突的步骤:
首先“结帐”到您要从另一个分支合并的分支(BRANCH_NAME_TO_BE_MERGED)
"git checkout "MAIN_BRANCH"
然后使用命令将其与“MAIN_BRANCH”合并:
“git 合并原点/BRANCH_NAME_TO_BE_MERGED”
Auto-merging src/file1.py
CONFLICT (content): Merge conflict in src/file1.py
Auto-merging src/services/docker/filexyz.py
Auto-merging src/cache.py
Auto-merging src/props.py
CONFLICT (content): Merge conflict in src/props.py
Auto-merging src/app.py
CONFLICT (content): Merge conflict in src/app.py
Auto-merging file3
CONFLICT (content): Merge conflict in file3
Automatic merge failed; fix conflicts and then commit the result.
现在您可以看到它显示“冲突(内容)”,对于那些具有“冲突”的文件,查看您的代码并解决它们
运行 "git status" => 它会显示你需要添加哪些文件(你已经解决了):
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: file3
both modified: src/app.py
both modified: src/props.py
both modified: src/utils/file1.py
解决所有冲突后,使用以下 git 命令逐个添加每个文件
git add file3
git add src/app.py
git add src/props.py
git add src/utils/file1.py
“git commit”(当你要提交时添加一些消息,如果没有,它将打开 vi 或 vim 编辑器,你需要按“esc:q!”然后按“enter”)再次运行“git status”
On branch MAIN_BRANCH
Your branch is ahead of 'origin/MAIN_BRANCH' by 10 commits.
(use "git push" to publish your local commits)
7."git 推送"
我要明确的第一件事是分支名称只是特定提交的别名。提交是 git 的作用,当你拉,推合并等等。每个提交都有一个唯一的 ID。
当您执行 $ git merge 时,实际发生的是 git 尝试将当前分支快速转发到引用分支所在的提交(换句话说,两个分支名称都指向同一个提交。)这种情况对于 git 来说是最简单的处理,因为没有新的提交。想想大师跳到你的分支正在冷却的 lilipad 上。可以设置 --no-ff 标志,在这种情况下,无论是否存在任何代码冲突,git 都会创建一个新的提交。
在您尝试合并的两个分支之间存在代码冲突的情况下(通常是两个分支,其提交历史在过去共享一个共同提交),快进将不起作用。 git 可能仍然能够自动合并文件,只要同一行没有被冲突文件中的两个分支更改。在这种情况下,git 将为您合并冲突的文件并自动提交它们。你可以通过 $ git diff --cached 来预览 git 的表现。或者您可以将 --no-commit 标志传递给合并命令,这会将修改后的文件留在您需要添加和提交的索引中。但是您可以 $ git diff 这些文件来查看合并将更改的内容。
第三种情况是当有冲突时 git 无法自动解决。在这种情况下,您需要手动合并它们。在我看来,这最容易通过合并完成,例如 araxis merge 或 p4merge(免费)。无论哪种方式,您都必须逐个处理每个文件。如果合并似乎卡住了,请使用 $ git merge --continue 来推动它。如果它不能继续,Git 应该告诉你,如果是,为什么不能。如果你觉得你在某个时候搞砸了合并,你可以执行 $ git merge --abort,任何合并都将撤消,你可以重新开始。完成后,您合并的每个文件都将是一个需要添加和提交的修改文件。您可以使用 $ git status 验证文件的位置。如果您尚未提交合并的文件。您需要这样做才能完成合并。您必须先完成合并或中止合并,然后才能切换分支。
当您尝试合并的两个分支都更改了同一文件的同一部分时,就会发生合并冲突。您可以使用 git status
生成冲突列表。
当遇到冲突行时,Git 将编辑受影响文件的内容,并使用视觉指示器标记冲突内容的两侧。
<<<<<<< HEAD
conflicted text from HEAD
=======
conflicted text from merging_branch
>>>>>>> merging_branch
当您修复冲突文件并准备好合并时,您所要做的就是运行 git add
和 git commit
以生成合并提交。提交后,git push
对分支的更改。
参考文章:Git merge。
添加完所有文件后,下一步是“git commit”。
“git status” 将建议做什么:尚未添加的文件列在底部,一旦它们都完成,它会在顶部建议一个提交,它解释了当前分支的合并状态。
可能已经晚了。这是因为你的 git HEAD 没有更新。这个推荐可以解决git reset HEAD
。
另一个选择也是,我尝试了 stash 并且在没有任何提交的情况下为我工作得很好
解决所有冲突后,
-> 混帐藏匿处
-> git stash apply stash@{0}
工作正常,您也可以在此之后切换到另一个分支。
不定期副业成功案例分享
git commit -am "your commit message"
同时执行添加和提交。git commit
确实有效。最好使用它来为您填充默认的合并提交消息。我避免使用“git commit -am”,因为它会覆盖消息git push
。