无法理解Git分支、合并和重设基础

无法理解Git分支、合并和重设基础,git,branch,rebase,Git,Branch,Rebase,我知道,其中说,重新基地是为小变化的队友,而合并为大的变化 我将三名队友的三个Git保存在以下目录结构中,我们都有相同的初始代码: project | - I | - myTeamMate1 | - myTeamMate2 这些分支不在同一个Git中。这意味着我不能使用重基和合并。 我使用vimdiff在队友之间同步更改。然而,这很耗时 我尝试在所有分支都位于一个Git下的情况下创建以下目录结构,但未成功: project | - I - my

我知道,其中说,重新基地是为小变化的队友,而合并为大的变化

我将三名队友的三个Git保存在以下目录结构中,我们都有相同的初始代码:

project 
      | - I
      | - myTeamMate1
      | - myTeamMate2
这些分支不在同一个Git中。这意味着我不能使用重基和合并。 我使用vimdiff在队友之间同步更改。然而,这很耗时

我尝试在所有分支都位于一个Git下的情况下创建以下目录结构,但未成功:

project
      | - I - myTeamMate1 - myTeamMate2
但是,我为我和我的队友运行clone命令:

git clone <url>

对于一个由3人组成的团队,我应该使用哪种目录结构,这样我就可以使用
rebase
merge
命令?

它们不在您所说的同一个git中这一事实不会以任何方式限制您。Git是分布式的,这意味着您可以在这些存储库之间获取、合并、重新设置基础等等


查看
git-remote--help
了解如何命名您的队友存储库,以便轻松导入他们的更改,重新设置他们的基础或执行合并。无需更改您的目录结构,您的目录完全可用。

只需一些其他想法即可完成Samuel的回答

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

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

  • Gitclone确实允许您获取对远程分支的引用,但不允许创建跟踪本地分支以获取同事的工作。ruby模块“”可以提供帮助

  • 就像它重写你分支的SHA-1一样(因为你在另一个分支上重放你的提交):如果你的队友基于你的分支进行合并,他们每次都必须合并你的所有提交,即使是那些已经合并的
    在这种情况下,最好有两个分支:

    • 一个工作分支您用于开发和重新设置基础(集成同行的工作,尽管该操作也可以在自己的分支中完成)
    • 一个发布公共分支,您只能在其上合并稳定的工作,然后其他远程存储库可以将其用作合并源

说实话,我开始努力输入一个漂亮、长而详细的回答。。。但我已经解释得比我现在能解释的好得多了。他介绍了不同分支、远程和合并的使用。这也是在屏幕上完成的,所以花一个小时,喝点咖啡,享受讲座

针对您的问题:您不应该使用目录设置。Git处理目录分支的方式与SVN处理分支文件夹的方式不同。git中的分支是完全不同的。虽然您可能不会设置一个中央存储库(我建议这样做),但您应该设置一个分支,每个人都将其最终的、干净的工作提交给它

我的一个示例存储库的屏幕截图是。在我的示例中,“bartender”只提交tar块中的代码,所以我必须自己导入代码来管理它。“master”(此处仅显示为remotes/elf/master)是一个公共svn存储库,我可以从中导入更改。“独裁”是我自己的代码基线,“私有”是我保存配置文件的地方,其中包含我想要管理但从不发布的密码。检查private上的时间戳,您会发现它们没有与下面的分支对齐。这是因为我将该分支重新定位为“专制”,而不是合并


您将注意到两个远程引用:elf和bard。这是我的两台远程机器,它们承载着软件。我可以随心所欲地推拉我的树枝到那里去。在您的情况下,您将拥有其他开发人员的远程存储库,他们将修改自己的分支。观看本教程将使您更好地了解其工作原理。祝你好运:)

代码示例

跟踪远程分支

git remote add -t master Hnr git://github.com/userName/files.git
这不会下载分支。它只是编辑文件.git/config并添加几行代码,告诉git如何远程获取数据

要获得队友的分支,请跑步

git fetch Hnr
git branch -a
要想知道你真的有你队友的分支,跑吧

git fetch Hnr
git branch -a
或者只看你朋友的树枝

git branch -r
上述两个命令最初引起了我的困惑,因为我不知道它们。这让我尝试了其他不必要的命令来获得分支

第二种拥有朋友分支机构的方式

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

git clone UrlAtGithub
然后,您显然可以如上所述使用Git remote在Git repo上建立分支:

git remote add master Hnr PATH/ToYourFriendRepo.git
结论:你可以使用两种方法让你的队友的分支为你服务,要么通过git克隆,要么不使用它。这两种方法都需要使用
git-remote-add
。后者的优点似乎是只需运行一个命令。前者再次将你的队友的全部回购信息提供给你的硬盘

请参阅Git手册,了解如何更新远程分支。(注意:远程分支可以位于您的计算机上。它不必位于远程计算机上。您的分支也可以是远程分支,但这会限制您的工作流。)


接下来,您可能需要合并您朋友的spe
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 rebase
shells/smallApps/extract: needs merge
shells/smallApps/extract~: needs merge
cannot rebase: you have unstaged changes
git difftool master:README dev:README
git remote add -f YourUserName UrlIn@form.git
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
git remote add github git@github.com:myLogin/myProject.git
git push github master