当前位置:  开发笔记 > 后端 > 正文

无法理解Git分支,合并和rebase

如何解决《无法理解Git分支,合并和rebase》经验,为你挑选了3个好方法。

我知道这个帖子说rebase是针对teamMates的小变化,而是针对大变化进行合并.

我在以下目录结构中保留了三个队友的三个Gits,我们都有相同的初始代码:

project 
      | - I
      | - myTeamMate1
      | - myTeamMate2

分支机构不在同一个Git中.这意味着我不能使用rebase和merge.我使用vimdiff在teamMates之间同步更改.但是,这很费时间.

我没有成功尝试进行以下目录结构,其中所有分支都在一个Git下:

project
      | - I - myTeamMate1 - myTeamMate2

但是,我为我和我的队友运行了clone命令:

git clone 

我为队友运行第二个克隆后收到错误消息

fatal: destination path 'dotFiles' already exists and is not an empty directory.

我应该与3人团队一起使用哪种目录结构,以便我可以使用rebasemerge命令?



1> VonC..:

只是其他一些想法来完成塞缪尔的答案.

与SVN不同,分支和目录在Git中完全不相关:拥有3个分支(团队中每个成员一个)并不意味着3个目录.这不是你在你的问题中的意思(因为你的目录实际上是3个Git存储库的3个根),但我更愿意明确提到它以防万一;)

Git是DVCS,3个存储库可以在任何地方(不在同一台计算机上的3个目录中).如果可以通过UNC路径(\\desktop\path\to\repo)访问它们,则可以将它们指定为远程.

Git clone确实允许您获取对远程分支的引用,但不会创建跟踪本地分支,以便您获得同事的工作.ruby模块" 远程分支 "可以提供帮助.

在重写你的分支机构的SHA-1时要警惕rebase(因为你在另一个分支上重放你的提交):如果你的队友将你的合并基于你的分支,他们将不得不每次都合并你的所有提交,甚至那些已经合并了!
在这种情况下,最好有2个分支:

您正在使用的工作分支用于开发和rebase(以集成同行的工作,尽管即使该操作也可以在其自己的分支中完成)

一个发布公共分支,在其上只合并您的工作稳定,并且然后可以通过其他远程仓库被用作合并源.



2> Samuel Tardi..:

事实上,他们不在你所声明的同一个git中并不以任何方式限制你.Git是分布式的,这意味着您可以在这些存储库之间进行获取,合并,转换等等.

查看git remote --help如何您的队友中命名您的队友存储库,以便您可以轻松导入他们的更改,重新绑定到他们或执行合并.无需更改目录结构,您的目录结构完全可用.



3> Léo Léopold ..:

代码示例

跟踪远程分支

git remote add -t master Hnr git://github.com/userName/files.git

这不会下载你的分支.它只是编辑文件.git/config并添加了一些行,告诉Git如何远程获取数据的位置和方式.

要获得teamMate的分支,请运行

git fetch Hnr

要确保您拥有teamMates的分支,请运行

git branch -a

或者只看你朋友的分支机构

git branch -r

上面两个命令最初引起了我的困惑,因为我不知道它们.这让我尝试了其他不必要的命令来为我分支.

有你朋友的分支的第二种方式

但请注意,您可以使用git-clone将您朋友的代码放到单独的目录中,如下所示

git clone UrlAtGithub

然后,你可以显然使用上面的Git-remote在你的Git repo上有一个分支:

git remote add master Hnr PATH/ToYourFriendRepo.git

结论:您可以使用两种方法为您的teamMate分支,无论是通过git-clone还是没有它.两种方式都需要使用git remote add.后者的优点似乎是你需要少运行一个命令.前者然后再次向你的teamMates提供你的硬盘的整个回购.

请参阅Git的手册,了解如何更新远程分支机构.(NB远程分支可以在您的计算机上.它不必在远程计算机中.您的分支也可以是远程分支,但这限制了您的工作流程.)


您可能接下来想要将您朋友的特定文件合并到您的分支机构.在这种情况下,只需知道朋友提交的5个首字母就可以合并文件.

[我不知道你怎么能做到以下几点:]例如,你需要跑步

git merge 76a32

您可能会得到以下输出

CONFLICT (add/add): Merge conflict in shells/externalPrograms
Auto-merging shells/smallApps/extract
CONFLICT (add/add): Merge conflict in shells/smallApps/extract
Auto-merging shells/smallApps/extract~
CONFLICT (add/add): Merge conflict in shells/smallApps/extract~
Automatic merge failed; fix conflicts and then commit the result.

在这种情况下,您的文件与朋友的文件差别很大,Git无法决定采用哪个文件.你需要明显地运行以下内容

git rebase

你明白了

shells/smallApps/extract: needs merge
shells/smallApps/extract~: needs merge
cannot rebase: you have unstaged changes

练习1:但是,我现在陷入困境,因为我的Tig没有在我的Git树上显示我朋友的提交. 你如何让你朋友的提交76a32到你的Git树的哪个分支?


你现在可能已经解决了这个问题.问题在于我忽略了解决Git给我通知的冲突.谷歌在官方Git网站上再次挽救了这一天:

如果存在冲突 - 例如,如果在远程分支和本地分支中以两种不同的方式修改了同一文件 - 那么您会收到警告 -

下一个问题是清理有问题的部分并再次合并.您可以在有问题的文件中看到与以下类似的内容 - 玩得开心!(我终于遇到了真正的问题;)

alt text http://dl.getdropbox.com/u/175564/exampleGitProblemSolving.png


在Mac的FileMerge中衍生和合并dotFiles时出现问题

我需要更新我的Git,因为只有最新的Git才有difftool -command.您可以在该主题中找到解决方案.

Difftool允许您从终端启动FileMerge中的dotFiles.您无法在GUI中访问它们.它很像

git difftool master:README dev:README

添加新的远程帐户后,您在Github中的帐户出现问题

您的Github帐户可能已在.git/config中消失.在这种情况下,您需要运行以下代码

git remote add -f YourUserName UrlIn@form.git

然后你可能会注意到你不能正常地进行git-push

git push origin master

您可能会收到以下错误消息

fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

您也可以尝试以下命令来解决问题

git push Masi master

以及玛西,大师和血统的所有3种2种排列.但是,没有一个命令不起作用.

练习2:如果您的远程列表中有teamMate,您如何提交您的github帐户?

Origin是您的实际外部git-repo的简称,例如,在Github.您的变量来源的内容可能已被另一个远程仓库替换.在这种情况下,我建议您通过创建一个新变量

git remote add github git@github.com:myLogin/myProject.git

请注意,您可以将origin2替换为github.Origin只是命名repo的惯例.

然后你可以简单地运行

git push github master

你的ssh-key中可能有一个密码.如果有,您可能会获得拒绝许可 - 警告.如果你这样做,请看线程.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有