博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何解决Git中的合并冲突
阅读量:2290 次
发布时间:2019-05-09

本文共 14279 字,大约阅读时间需要 47 分钟。

如何解决Git中的合并冲突?


#1楼

对于想要半手动解决合并冲突的用户:

git diff --name-status --diff-filter=U

显示所有需要解决冲突的文件。

依次打开每个文件,或一次打开所有文件:

emacs $(git diff --name-only --diff-filter=U)

当访问需要在Emacs中进行编辑的缓冲区时,键入

ALT+x vc-resolve-conflicts

这将打开三个缓冲区(mine,他们的缓冲区和输出缓冲区)。 通过按“ n”(下一个区域),“ p”(预置区域)进行导航。 按“ a”和“ b”分别将地雷或其区域复制到输出缓冲区。 和/或直接编辑输出缓冲区。

完成后:按“ q”。 Emacs询问您是否要保存此缓冲区:是的。 在完成缓冲区标记后,可通过从末尾运行将其标记为已解析:

git add FILENAME

完成所有缓冲区类型后

git commit

完成合并。


#2楼

您可以采用其他方法详细介绍的多种方法来解决合并冲突。

我认为真正的关键是知道更改如何与本地和远程存储库一起流动。 关键在于了解跟踪分支。 我发现我将跟踪分支视为本地,实际文件目录与定义为源的远程之间的“中间缺失”部分。

我个人已经习惯了两件事来避免这种情况。

代替:

git add .git commit -m"some msg"

其中有两个缺点-

a)所有新的/更改的文件都会被添加,其中可能包含一些不需要的更改。

b)您无需先查看文件列表。

所以我改为:

git add file,file2,file3...git commit # Then type the files in the editor and save-quit.

这样,您就可以更仔细地考虑要添加哪些文件,还可以查看列表,并在使用编辑器消息时多加考虑。 我发现当我使用全屏编辑器而不是-m选项时,它还可以改善提交消息。

[更新-随着时间的流逝,我将更多时间切换到:

git status # Make sure I know whats going ongit add .git commit # Then use the editor

]

另外(与您的情况更相关),我尽量避免:

git pull

要么

git pull origin master.

因为pull意味着合并,并且如果您在本地进行了不希望合并的更改,则可以轻松地得到合并的代码和/或不应该合并的代码的合并冲突。

相反,我尝试去做

git checkout mastergit fetch   git rebase --hard origin/master # or whatever branch I want.

您可能还会发现此帮助:


#3楼

  1. 确定哪些文件有冲突(Git会告诉您)。

  2. 打开每个文件并检查差异; Git将它们划分边界。 希望可以很清楚地看到每个块的版本。 您可能需要与提交代码的其他开发人员进行讨论。

  3. 解决冲突后,在文件git add the_file

  4. 解决所有冲突后,请执行git rebase --continue或完成时Git所说的命令。


#4楼

如果您要进行频繁的小提交,请首先使用git log --merge查看提交注释。 然后git diff将向您显示冲突。

对于涉及多行的冲突,更容易查看外部GUI工具中发生的情况。 我喜欢opendiff-Git还支持vimdiff,gvimdiff,kdiff3,tkdiff,meld,xxdiff,可以直接安装,也可以安装其他工具: git config merge.tool "your.tool"将设置您选择的工具,然后是git mergetool合并失败后,将显示上下文差异。

每次您编辑文件以解决冲突时, git add filename将更新索引,并且您的差异将不再显示它。 当所有冲突都已解决并且其文件已被git add -ed时, git commit将完成您的合并。


#5楼

尝试: git mergetool

它会打开一个GUI,逐步引导您解决每个冲突,然后您可以选择如何合并。 有时之后需要进行一些手动编辑,但通常仅此一项就足够了。 这肯定比手工完成整个事情好得多。

根据@JoshGlover评论:

除非您安装一个GUI,否则该命令不一定会打开GUI。 为我运行git mergetool导致使用了vimdiff 。 您可以安装以下工具之一,而不是使用它: meldopendiffkdiff3tkdiffxxdifftortoisemergegvimdiffdiffuseecmergep4mergearaxisvimdiffemerge

以下是使用vimdiff解决合并冲突的示例过程。 基于

第1步 :在终端中运行以下命令

git config merge.tool vimdiffgit config merge.conflictstyle diff3git config mergetool.prompt false

这会将vimdiff设置为默认的合并工具。

第2步 :在终端中运行以下命令

git mergetool

步骤3 :您将看到以下格式的vimdiff显示

╔═══════╦══════╦════════╗  ║       ║      ║        ║  ║ LOCAL ║ BASE ║ REMOTE ║  ║       ║      ║        ║  ╠═══════╩══════╩════════╣  ║                       ║  ║        MERGED         ║  ║                       ║  ╚═══════════════════════╝

这4个视图是

本地–这是当前分支中的文件

BASE –共同祖先,两次更改之前文件的外观

远程–将文件合并到分支中

已合并-合并结果,这就是保存在存储库中的内容

您可以使用ctrl + w在这些视图之间导航。 您可以使用ctrl + wj直接进入MERGED视图。

有关和 vimdiff导航的更多信息

第四步 。 您可以通过以下方式编辑MERGED视图

如果您想从REMOTE获得更改

:diffg RE

如果要从BASE获得更改

:diffg BA

如果您想从本地获得更改

:diffg LO

步骤5 。 保存,退出,提交和清理

:wqa保存并退出vi

git commit -m "message"

git clean删除由diff工具创建的多余文件(例如* .orig)。


#6楼

请查看Stack Overflow问题中的答案, ,特别是 ,该显示了如何查看有问题的文件的不同版本,例如,

# Common base version of the file.git show :1:some_file.cpp# 'Ours' version of the file.git show :2:some_file.cpp# 'Theirs' version of the file.git show :3:some_file.cpp

#7楼

请参阅或者在Git中查看git merge文档,以了解什么是合并冲突标记。

此外,“ 部分介绍了如何解决冲突:

看到冲突后,您可以做两件事:

  • 决定不合并。 您需要执行的唯一清除操作是将索引文件重置为HEAD commit以反转2。并清除2和3对工作树所做的更改。 git merge --abort可用于此目的。

  • 解决冲突。 Git将在工作树中标记冲突。 将文件编辑为shape并git add它们git add到索引中。 使用git commit来完成交易。

您可以使用多种工具来解决冲突:

  • 使用mergetool。 git mergetool启动图形化合并工具,它将通过合并工作。

  • 看差异。 git diff将显示三向差异,突出显示HEADMERGE_HEAD版本的更改。

  • 查看每个分支的差异。 git log --merge -p <path>将首先显示HEAD版本的差异,然后显示MERGE_HEAD版本。

  • 看原件。 git show :1:filename显示公共祖先, git show :2:filename显示HEAD版本,而git show :3:filename显示MERGE_HEAD版本。

您还可以在书的“ ”部分中了解有关合并冲突标记以及如何解决它们的信息。


#8楼

CoolAJ86的答案概括了几乎所有内容。 如果您在同一段代码中的两个分支中都有更改,则必须进行手动合并。 在任何文本编辑器中打开有冲突的文件,您应该看到以下结构。

(Code not in Conflict)>>>>>>>>>>>(first alternative for conflict starts here)Multiple code lines here===========(second alternative for conflict starts here)Multiple code lines here too    <<<<<<<<<<<(Code not in conflict here)

在删除等号和尖括号的同时,以希望新代码成为的方式选择一种选择或两者的组合。

git commit -a -m "commit message"git push origin master

#9楼

如果要从分支(测试)合并到master,可以按照以下步骤操作:

步骤1:前往分行

git checkout test

步骤2: git pull --rebase origin master

步骤3:如果存在一些冲突,请转到这些文件进行修改。

步骤4:添加这些更改

git add #your_changes_files

步骤5: git rebase --continue

步骤6:如果仍然存在冲突,请再次返回步骤3。 如果没有冲突,请执行以下操作: git push origin +test

步骤7:然后在测试和主机之间没有冲突。 您可以直接使用合并。


#10楼

git log --merge -p [[--] path]

似乎并不总是对我有用,并且通常最终会显示两个分支之间不同的每个提交,即使使用--将路径与命令分开也是如此。

解决此问题的方法是打开两个命令行,一次运行

git log ..$MERGED_IN_BRANCH --pretty=full -p [path]

在另一个

git log $MERGED_IN_BRANCH.. --pretty=full -p [path]

$MERGED_IN_BRANCH替换$MERGED_IN_BRANCH我合并的分支,并将[path]替换为有冲突的文件。 此命令将以补丁形式记录两次( .. )之间的所有提交。 如果像上面的命令中那样将一侧留空,则git将自动使用HEAD (在这种情况下,您要合并到的分支)。

这样,您便可以查看在两个分支分歧之后,什么提交提交到了文件中。 通常,它更容易解决冲突。


#11楼

我始终按照以下步骤操作以避免冲突。

  • git checkout master(进入master分支)
  • git pull(更新您的母版以获得最新代码)
  • git checkout -b mybranch(签出一个新的分支并开始在该分支上工作,以便您的主服务器始终保持在主干的顶部。)
  • git添加 AND git commit和git push(更改后在本地分支上)
  • git checkout master(回到您的master。)

现在,您可以执行相同的操作,并维护所需的多个本地分支,并在需要时同时进行git checkout的同时工作。


#12楼

请按照以下步骤修复Git中的合并冲突:

  1. 检查Git状态: git status

  2. 获取补丁集: git fetch (从Git提交中签出正确的补丁)

  3. 签出本地分支(在我的示例中为temp1): git checkout -b temp1

  4. 从master 提取最近的内容: git pull --rebase origin master

  5. 启动mergetool并检查冲突并解决它们...并使用当前分支检查远程分支中的更改: git mergetool

  6. 再次检查状态: git status

  7. 删除由mergetool本地创建的不需要的文件,通常mergetool会创建带有* .orig扩展名的多余文件。 请删除该文件,因为它只是重复的文件,并在本地修复更改,然后添加文件的正确版本。 git添加#your_changed_correct_files

  8. 再次检查状态: git status

  9. 将更改提交到相同的提交ID(避免使用新的单独补丁集): git commit --amend

  10. 推送到master分支: git push (到您的Git存储库)


#13楼

同时更改文件时,会发生合并冲突。 这是解决方法。

git CLI

当您陷入冲突状态时,请执行以下简单步骤:

  1. 请注意以下冲突文件列表: git status (在“未Unmerged paths部分下)。
  2. 通过以下方法之一分别解决每个文件的冲突:

    • 使用GUI解决冲突: git mergetool (最简单的方法)。

    • 要接受远程/其他版本,请使用: git checkout --theirs path/file 。 这将拒绝您对该文件所做的任何本地更改。

    • 要接受本地/我们的版本,请使用: git checkout --ours path/file

      但是,您必须要小心,因为出于某种原因完成了冲突的远程更改。

      相关:

    • 手动编辑有冲突的文件,并查找<<<<< / >>>>>之间的代码块,然后从上方或下方选择版本===== 。 请参阅: 。

    • 路径和文件名冲突可以通过git add / git rm解决。

  3. 最后,使用git status查看准备提交的文件。

    如果在“未Unmerged paths下仍然有任何文件,并且您确实手动解决了冲突,请让Git知道已通过以下方法解决了该问题: git add path/file

  4. 如果成功解决了所有冲突,请通过以下方式提交更改: git commit -a然后像往常一样推送到remote。

另请参阅: GitHub

有关实际的教程,请检查: 。

差异合并

我已经成功使用了 ,它可以在Windows,macOS和Linux / Unix上直观地比较和合并文件。

它可以以图形方式显示3个文件之间的更改,并允许自动合并(在安全的情况下)并完全控制编辑结果文件。

图像来源: (Linux屏幕截图)

只需下载并以以下方式在回购中运行:

git mergetool -t diffmerge .

苹果系统

在macOS上,您可以通过以下方式安装:

brew install caskroom/cask/brew-caskbrew cask install diffmerge

并且可能(如果未提供)您需要在PATH中放置以下额外的简单包装器(例如/usr/bin ):

#!/bin/shDIFFMERGE_PATH=/Applications/DiffMerge.appDIFFMERGE_EXE=${DIFFMERGE_PATH}/Contents/MacOS/DiffMergeexec ${DIFFMERGE_EXE} --nosplash "$@"

然后,您可以使用以下键盘快捷键:

  • - Alt- / 跳到上一个/下一个更改。
  • - Alt- / 接受来自左或右的更改

或者,您可以使用 (Xcode工具的一部分),它可以将两个文件或目录合并在一起以创建第三个文件或目录。


#14楼

从顶部开始,这是一个可能的用例:

您将进行一些更改,但是,哦,您不是最新的:

git fetch origingit pull origin masterFrom ssh://gitosis@example.com:22/projectname * branch            master     -> FETCH_HEADUpdating a030c3a..ee25213error: Entry 'filename.c' not uptodate. Cannot merge.

因此,您可以及时了解最新信息并重试,但是会发生冲突:

git add filename.cgit commit -m "made some wild and crazy changes"git pull origin masterFrom ssh://gitosis@example.com:22/projectname * branch            master     -> FETCH_HEADAuto-merging filename.cCONFLICT (content): Merge conflict in filename.cAutomatic merge failed; fix conflicts and then commit the result.

因此,您决定看一下更改:

git mergetool

哦,我的,哦,我的上游更改了一些内容,但是只是为了使用我的更改...没有...他们的更改...

git checkout --ours filename.cgit checkout --theirs filename.cgit add filename.cgit commit -m "using theirs"

然后我们尝试最后一次

git pull origin masterFrom ssh://gitosis@example.com:22/projectname * branch            master     -> FETCH_HEADAlready up-to-date.

-


#15楼

奖金:

说到上述答案中的拉取/提取/合并,我想分享一个有趣且富有成效的技巧,

git pull --rebase

上面的命令是我的git一生中最有用的命令,它节省了很多时间。

在将新提交的更改推送到远程服务器之前,请尝试git pull --rebase而不是git pull和手动merge ,它将自动同步最新的远程服务器更改(通过fetch + merge),并将本地最新提交置于git的顶部日志。 无需担心手动拉/合并。

如有冲突,请使用

git mergetoolgit add conflict_filegit rebase --continue

有关详细信息,请访问: :


#16楼

简而言之,如果您知道其中一个存储库中的更改并不重要,并且想要解决所有更改以支持另一个存储库,请使用:

git checkout . --ours

解决有利于您的存储库的更改,或者

git checkout . --theirs

解决有利于其他或主存储库的变更。

否则,您将不得不使用GUI合并工具来一步一步地浏览文件,例如合并工具为p4merge ,或者写下您已经安装的任何人的名字。

git mergetool -t p4merge

完成文件后,您必须保存并关闭,因此下一个文件将打开。


#17楼

合并冲突可能在不同的情况下发生:

  • 运行“ git fetch”,然后“ git merge”时
  • 运行“ git fetch”,然后“ git rebase”时
  • 运行“ git pull”时(实际上等于上述条件之一)
  • 运行“ git stash pop”时
  • 当您应用git补丁时(提交到要传输的文件的提交,例如通过电子邮件)

您需要安装与Git兼容的合并工具来解决冲突。 我个人使用KDiff3,并且发现它非常方便。 您可以在此处下载其Windows版本:

顺便说一句,如果您安装了Git Extensions,则其安装向导中会提供一个选项来安装Kdiff3。

然后设置git configs以使用Kdiff作为其合并工具:

$ git config --global --add merge.tool kdiff3$ git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"$ git config --global --add mergetool.kdiff3.trustExitCode false$ git config --global --add diff.guitool kdiff3$ git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"$ git config --global --add difftool.kdiff3.trustExitCode false

(请记住将路径替换为Kdiff exe文件的实际路径。)

然后,每次遇到合并冲突时,您只需要运行以下命令:

$git mergetool

然后,它打开Kdiff3,然后首先尝试自动解决合并冲突。 大多数冲突将自发解决,您需要手动修复其余的冲突。

这是Kdiff3的样子:

然后,一旦完成,请保存文件,然后转到有冲突的下一个文件,然后再次执行相同的操作,直到解决所有冲突。

要检查所有内容是否成功合并,只需再次运行mergetool命令,您应该得到以下结果:

$git mergetoolNo files need merging

#18楼

我要么想要我的完整版本,要么想要查看单个更改并决定每个更改。

完全接受我或他们的版本

接受我的版本(本地版本,我们版本):

git checkout --ours -- 
git add
# Marks conflict as resolvedgit commit -m "merged bla bla" # An "empty" commit

接受他们的版本(远程的,他们的):

git checkout --theirs -- 
git add
git commit -m "merged bla bla"

如果要对所有冲突文件执行以下操作:

git merge --strategy-option ours

要么

git merge --strategy-option theirs

查看所有更改并单独接受

  1. git mergetool
  2. 查看更改并接受每个版本中的任何一个。
  3. git add <filename>
  4. git commit -m "merged bla bla"

默认mergetool命令行中工作 。 如何使用命令行合并工具应该是一个单独的问题。

您也可以为此安装可视化工具 ,例如, meld并运行

git mergetool -t meld

它将打开本地版本(我们的),“基本”或“合并的”版本(合并的当前结果)和远程版本(它们的)。 完成后保存合并的版本,再次运行git mergetool -t meld ,直到得到“不需要合并文件”,然后转到步骤3和4。


#19楼

patience

令我惊讶的是,没有其他人谈论过使用合并递归策略来patience解决冲突。 对于较大的合并冲突,使用patience为我提供了良好的结果。 这个想法是它将尝试匹配块而不是单个行。

例如,如果您更改程序的缩进,则默认的Git合并策略有时会匹配单个大括号{

,它属于不同的功能。 patience避免了这种情况:

git merge -s recursive -X patience other-branch

从文档中:

With this option, merge-recursive spends a little extra time to avoid mismerges that sometimes occur due to unimportant matching lines (e.g., braces from distinct functions). Use this when the branches to be merged have diverged wildly.

与共同祖先的比较

如果您有合并冲突,并且想了解其他人在修改其分支时的想法,则有时将他们的分支直接与公共祖先(而不是我们的分支)进行比较会更容易。 为此,您可以使用merge-base

git diff $(git merge-base 
)

通常,您只想查看特定文件的更改:

git diff $(git merge-base 
)

#20楼

解决冲突的一种更安全的方法是使用 (此处建议的常见解决方案是容易出错的恕我直言)。

有关如何使用它的快速介绍,请参见 。


#21楼

从2016年12月12日开始,您可以合并分支并解决github.com上的冲突

因此,如果您不想使用旧答案中提供的命令行或任何第三方工具 ,请使用GitHub的本机工具。

详细解释了,但是基础是,通过UI“合并”两个分支后,您现在将看到“解决冲突”选项,该选项将带您到允许您处理这些合并冲突的编辑器。


#22楼

共有3个步骤:

  1. 通过命令查找哪些文件导致冲突

    git status
  2. 检查文件,您会在其中找到标记为

    <<<<<<<
  3. 将其更改为所需的方式,然后使用命令进行提交

    git add solved_conflicts_files git commit -m 'merge msg'

#23楼

git获取

git checkout 你的分支
git rebase master

在此步骤中,您将尝试使用首选IDE修复冲突。

您可以点击此链接检查ho来解决文件中的冲突

git添加

git rebase-继续
git commit-修改
git push origin HEAD:refs / drafts / master(像草稿一样推送)

现在,一切都很好,您会发现自己在gerrit中的承诺

我希望这将对每个与此问题有关的人有所帮助。


#24楼

对于使用Visual Studio的用户(在我的情况下为2015)

  1. 在VS中关闭项目。 尤其是在大型项目中,使用UI进行合并时,VS往往会出现异常。

  2. 在命令提示符下执行合并。

    git checkout target_branch

    git merge source_branch

  3. 然后在VS中打开项目,然后转到Team Explorer-> Branch。 现在,出现一条消息,指出合并处于挂起状态,并且在该消息的正下方列出了有冲突的文件。

  4. 单击有冲突的文件,您将可以选择合并,比较,获取源,获取目标。 VS中的合并工具非常易于使用。


#25楼

如果您使用intelliJ作为IDE,请尝试通过以下方法将父级合并到分支中

git checkout 
git merge origin/

它将显示所有这样的冲突

A_MBPro:test anu $ git merge origin /自动合并src / test / java / com /.../ TestClass.java CONFLICT(内容):合并src / test / java / com /.../ TestClass.java中的冲突

现在请注意,文件TestClass.java在intelliJ中显示为红色,并且git status将显示

Unmerged paths:(use "git add 
..." to mark resolution)both modified: src/test/java/com/.../TestClass.java

在intelliJ中打开文件,它将包含以下部分:

<<<<<<< HEAD    public void testMethod() {    }    =======    public void testMethod() { ...    }    >>>>>>> origin/

HEAD是本地分支上的更改,而origin /是远程分支上的更改。 在这里保留您需要的东西,然后删除不需要的东西。 那是

git add TestClass.java   git commit -m "commit message"   git push

#26楼

我遵循以下过程。

解决合并冲突的过程:

  1. 首先,从要合并到的目标分支中提取最新版本git pull origin develop

  2. 当您从目的地获得最新信息时,现在可以通过删除那些多余的字符在IDE中手动解决冲突。

  3. 进行git add将这些编辑后的文件git add到git队列中,以便可以commitpush送到您正在处理的同一分支。

  4. 完成git add ,执行git commit提交更改。

  5. 现在通过git push origin HEAD将更改推送到工作分支

就这样,如果您使用Bitbucket或GitHub,您将在请求请求中看到它已解决。


#27楼

这个答案是为像我这样喜欢在编辑器中进行所有操作的VIM用户添加替代方法。


TL; DR


Tpope提出了这个功能强大的VIM插件 。 一旦安装,你可以运行:Gstatus检查有冲突的文件:Gdiff要在3种方式合并打开的Git。

在三元合并中, 逃犯可以让您以以下方式获取要合并的任何分支的更改:

  • :diffget //2 ,从原始( HEAD )分支获取更改:
  • :diffget //3 ,从合并分支获取更改:

完成合并文件后,在合并的缓冲区中键入:Gwrite 。 Vimcasts发布了一段精彩的 ,详细介绍了此步骤。


#28楼

如果尚未尝试,请尝试使用Visual Studio Code进行编辑。 它的作用是在您尝试合并(并陷入合并冲突)之后。VS代码自动检测到合并冲突。

通过显示对原始内容所做的更改以及您是否接受incoming或删除的内容,它可以为您提供很好的帮助。

current change (表示合并前的原始current change )'?。

它对我有帮助,它也可以为您服务!

PS:只有在您的代码和Visual Studio Code中配置了git时,它才有效。


#29楼

Gitlense For VS代码

您可以尝试 for VS Code,它们的主要功能是:

3.轻松解决冲突。

我已经喜欢这个功能:

2.当前的线路责备。

3.天沟责备

4.状态栏责备

您可以查看许多功能。


#30楼

我发现合并工具很少能帮助我理解冲突或解决方案。 通常,在文本编辑器中查看冲突标记并使用git log作为补充通常会更成功。

这里有一些提示:

秘诀一

我发现最好的是使用“ diff3”合并冲突样式:

git config merge.conflictstyle diff3

这将产生如下冲突标记:

<<<<<<
>>>>>>

中间部分是共同祖先的样子。 这很有用,因为您可以将其与最高和最低版本进行比较,以更好地了解每个分支上的更改,从而更好地了解每个更改的目的。

如果冲突只有几行,那么通常会使冲突非常明显。 (知道如何解决冲突是非常不同的;您需要了解其他人的工作。如果您感到困惑,最好将这个人叫到您的房间,以便他们可以看到您的情况。在。)

如果冲突时间更长,则将这三个部分分别剪切并粘贴到三个单独的文件中,例如“ mine”,“ common”和“ theirs”。

然后,我可以运行以下命令来查看导致冲突的两个差异块:

diff common minediff common theirs

这与使用合并工具不同,因为合并工具也将包括所有不冲突的差异块。 我发现这会分散注意力。

技巧二

有人已经提到了这一点,但是了解每个差异块背后的意图通常对于理解冲突的根源和如何处理很有帮助。

git log --merge -p 

这显示了在共同祖先和您要合并的两个头之间触及该文件的所有提交。 (因此,它不包括合并之前两个分支中已经存在的提交。)这可以帮助您忽略显然不是当前冲突因素的diff块。

秘诀三

使用自动化工具验证您的更改。

如果您有自动化测试,请运行这些测试。 如果您有 ,请运行它。 如果它是一个可构建的项目,则在提交之前进行构建,等等。在所有情况下,您都需要进行一些测试以确保所做的更改不会破坏任何内容。 (哎呀,即使没有冲突的合并也可能破坏工作代码。)

秘诀四

未雨绸缪; 与同事沟通。

提前计划并了解其他人正在做什么,可以帮助防止合并冲突和/或帮助及早解决它们-尽管细节仍在脑海中。

例如,如果您知道您和另一个人都在进行都会影响同一组文件的不同重构,那么您应该提前进行交谈,以便更好地了解每个人的更改类型制造。 如果以串行方式而不是并行方式执行计划的更改,则可以节省大量时间和精力。

对于跨越大量代码的大型重构,您应该强烈考虑串行工作:每个人都停止工作在代码的那个区域,而一个人执行完整的重构。

如果您不能连续工作(也许是由于时间紧迫),那么就预期的合并冲突进行交流至少可以帮助您在细节仍在脑海中的同时早日解决问题。 例如,如果某个同事在一个星期的时间内进行了一系列破坏性的提交,则您可以选择在该周中每天一次或两次在该同事分支上进行合并/重新设置。 这样,如果您发现合并/重新设置冲突,则与等待几周一次将所有内容合并在一起相比,可以更快地解决它们。

秘诀五

如果不确定合并,请不要强行执行。

合并可能会让人感到不知所措,尤其是当存在大量冲突文件并且冲突标记覆盖数百行时。 通常,在估算软件项目时,我们没有为处理诸如粗糙的合并之类的开销项目留出足够的时间,因此,花数小时来剖析每个冲突似乎是一种真正的拖累。

从长远来看,预先计划并了解其他人正在做什么是预测合并冲突并为自己准备在更少的时间内正确解决它们的最佳工具。

转载地址:http://hudnb.baihongyu.com/

你可能感兴趣的文章
如何自己安裝和使用 PEAR
查看>>
Freebsd 公钥 public key ssh 登录 secureCRT
查看>>
PHP也可以當成Shell Script
查看>>
正则表达式使用详解(一)
查看>>
WIN下,Web.py+apache2.2(mod_wsgi)保证session可用
查看>>
前端开发框架bootstrap
查看>>
The Best BootStrap Resources
查看>>
监听的IP本地不存在 负载均衡启动报错
查看>>
缓冲(Bufer)和缓存(cache)区别
查看>>
tmpfs文件系统
查看>>
浏览器缓存
查看>>
favicon.ico引起的大量404
查看>>
Nginx缓存服务
查看>>
NFS一些问题
查看>>
利用TCP Wrappers构建sshd访问控制列表
查看>>
DenyHosts
查看>>
Maven构建环境安装
查看>>
SVN检出报错
查看>>
SVN同步版本库
查看>>
网络流量分析工具TCPDUMP
查看>>