长话短说… 据我所知,术语“分支”(用Git的说法)可能指的是相关但不同的东西: 一个非符号引用/指向提交的指针, 这样的参考名称(例如“主”), 存储库的提交DAG的子图由所有提交可达的提交组成,这些提交由这样的引用所指向的提交。 但是,我已经看到这个术语明显地指的是除了这三种可能的用法之外(下面更详细的介绍)。 在一个Git的上下文中,是否还有其他有效的和明确的术语“分支”的用法,我的上面的列表丢失? 更多细节 使用Git大约一年后,我正在为CS学生准备一个简短的教程。 我真的想确定一下Git的术语,以避免混淆。 当然,我一直在使用Git分支, 我很舒服地使用它们,并findGit分支模型真棒。 然而,我仍然觉得术语“分支”是有问题的和模棱两可的,因为它似乎至less指两种不同的东西,这取决于它使用的上下文…有时甚至在相同的教程/手册中。 用法1:分支=提交的指针/引用 Pro Git书(在3.1–分支是什么 )在显示下面的图之后, 继续定义一个分支 只是一个轻量级的可移动指针到这些提交之一。 据我所知,这也是“分支”在Git手册页中的含义。 我对这个定义很满意。 我认为分支只是指向DAG中特定提交的引用,分支的“提交提交”是该引用指向的提交。 到现在为止还挺好。 可是等等… 用法2:分支= DAG的子图 Atlassian Git教程介绍分支如下: 分支代表独立的发展路线。 他们的意思是,我想是一串提交。 让我细化这个想法……唯一对我有意义的解释是,术语“分支”也可以指存储库提交DAG的子图,它由所考虑的提示提交可达到的所有提交组成 。 但是,Pro Git书籍也包含以下图表(参见3.4 – 分支工作stream程 ), 这似乎与我的解释矛盾,因为它似乎暗示只有提交C2 – C5 (不是C1 )属于develop分支,而只提交C6 – C7 (不是C1 – C5 )属于topic分支。 我觉得这个用法是模棱两可的,因为如果我在这个阶段绘制DAG,而不知道过去分支引用指向的位置,并且没有任何假定三个分支之间的任何层次结构,我会得到的是 其他Git学习资源中的一些图表也令人困惑。 特别考虑以下内容(来自Lynda.com的简介video- Git基本培训 ): 在这里, master […]
我正在寻找安装一个git服务器与我的团队共享项目。 我不想在服务器上为每个需要git访问权限的开发者创build一个用户帐号。 似乎有两个并发的解决scheme,涵盖了这个问题:gitosis&gitolite。 我找不到两种解决scheme之间的任何比较。 他们之间的主要区别是什么? 还有其他类似的解决scheme?
是否可以撤消由以下命令造成的更改? 如果是这样,怎么样? git reset –hard HEAD~1
我已经对作为一组文件的一部分提交了几次的文件进行了一些更改,但是现在想要将其上的改变重置/恢复到以前的版本。 我已经做了一个git log以及一个git diff来find我需要的修订版本,但是不知道如何让文件恢复到之前的状态。
我是新手,我正在练习。 我创build了一个本地分支,但我看到,当我做了git push我的分支没有上传到存储库。 我不得不实际做的: git push -u origin –all 。 为什么是这样? 是不是一个分支默认推动新的变化? 为什么我需要运行第二个命令?
在我的主分支中,我做了一个git merge some-other-branch在本地git merge some-other-branch ,但从未将更改推送到原始主。 我不是想要合并,所以我想撤销它。 当我合并后做一个git status ,我得到这个消息: # On branch master # Your branch is ahead of 'origin/master' by 4 commits. 根据我发现的一些指示 ,我试着跑步 git revert HEAD -m 1 但现在我得到这个消息与git status : # On branch master # Your branch is ahead of 'origin/master' by 5 commits. 我不希望我的分支在任何次数的提交之前。 我该如何回到这一点?
我们正在将我们(巨大的)项目移动到git上,我们正在考虑使用子模块。 我们的计划是在超级项目中有三个不同的头:释放,稳定,最新。 项目负责人将负责发布和稳定的分支机构。 他们将根据需要移动子模块。 问题是“最新”的头。 我们希望超级项目“最新”头部(自动)跟踪所有子模块的主分支。 如果能够显示所有提交给子模块的历史,那也是非常棒的。 我曾经看过gitslave,但这不是我们想要的。 有什么build议么?
如何在git pull上强制覆盖本地文件? 情景如下: 团队成员正在修改我们正在处理的网站的模板 他们正在添加一些图像的图像目录(但忘记在源代码控制下添加它们) 他们通过邮件将图像发送给我 我在源代码控制下添加图像,并将其与其他更改一起推送到GitHub 他们不能从GitHub提取更新,因为Git不想覆盖他们的文件。 我得到的错误是: 错误:未经追踪的工作树文件“public / images / icon.gif”将被合并覆盖。 我如何强制Git覆盖它们? 这个人是一个devise师 – 通常我手工解决所有的冲突,所以服务器有最新的版本,他们只需要在他们的计算机上更新。
我有一个我不想提交到我的仓库的文件的本地更改。 这是一个用于在服务器上构build应用程序的configuration文件,但是我想用不同的设置在本地构build。 当然,当我把'git status'作为上演的东西的时候,这个文件总是显示出来。 我想隐藏这个特定的变化,而不是提交。 我不会对文件做任何其他更改。 经过一番挖掘,我看到了两个选项:“假设 – 不变”和“跳跃工作树”。 以前的问题在这里讨论,但并没有真正解释它们的区别。 我的问题是这两个命令如何不同? 为什么有人会使用这个或另一个?
假设我正在通过git仓库与某人合作,并且有一个特定的文件,我不想接受任何外部更改。 有没有办法让我设置我的本地回购,不要抱怨每次我混帐时发生冲突的合并? 我想在合并这个文件时总是select我的本地版本。