好的,在看到PJ Hyett的这篇文章后,我决定跳到最后,使用Git。

所以我需要的是Git初学者实用指南。“初学者”被定义为知道如何处理他们的编译器,在某种程度上理解Makefile是什么,并且在没有很好地理解它的情况下接触了源代码控制。

“实用”被定义为这个人不想详细了解Git在后台做什么,甚至不关心(或知道)它是分布式的。你的答案可能暗示了这些可能性,但试着瞄准那些希望在备份和安全的“服务器”上保留“主”存储库的初学者,并将他们的本地存储库仅视为“客户端”资源。

So:

安装/设置

如何安装Git如何设置Git?尝试涵盖Linux、Windows、Mac,思考“客户端/服务器”思维。在Windows上使用Msysgit安装GIT服务器如何创建新项目/存储库?如何将其配置为忽略不属于代码库的文件(.obj、.user等)?

使用代码

如何获取最新代码?如何检查代码?如何提交更改?如何查看未提交的内容或当前代码库的状态?如何销毁不需要的提交?如何比较文件的两个版本,或当前文件和以前的版本?如何查看文件修订的历史记录?如何处理二进制文件(例如,visio文档或编译器环境)?如何合并“同时”更改的文件?如何撤消(恢复或重置)提交?

标记、分支、发布、基线

如何“标记”、“标记”或“发布”特定文件集的特定修订集,以便以后随时可以提取该修订集?你如何获得特定的“释放”?你是怎么分支的?如何合并分支?如何解决冲突并完成合并?如何将一个分支的部分合并到另一个分支中?什么是重新定基?如何跟踪远程分支?如何在远程存储库上创建分支?如何删除远程存储库上的分支?Git工作流示例

另外

描述并链接到一个好的GUI、IDE插件等,使Git成为一个非命令行资源,但请列出它的局限性和优点。msysgit-跨平台,包含在Git中gitk-跨平台历史查看器,包含在Git中gitnub-Mac OS Xgitx-Mac OS X历史查看器smartgit-跨平台、商业、测试版用于Linux的tig控制台GUIqgit-用于Windows、Linux的GUIGitExtensions-Windows包,包括友好的GUI初学者还应该知道其他常见任务吗?Git Status告诉您刚才做了什么,您有什么分支,以及其他有用的信息如何将subversion存储库设置为源代码控制源代码,从而有效地工作?

其他Git初学者参考

Git指南Git手册Git魔法数字广播GitHub指南Git教程Scott Chacon的Progit-书Git-SVN速成课程Git自下而上Git就绪gitref.org网站Git可视化备忘单

深入Git

从概念上理解Git计算机科学家Git(和另一个版本)

我会不时地检查条目,并“整理”它们,使它们具有一致的外观/感觉,并且很容易扫描列表-请随意遵循简单的“标题-简要说明-说明列表-获取和额外信息”模板。我还将链接到上面项目符号列表中的条目,以便以后很容易找到它们。


当前回答

好吧,尽管你要求我们不要“简单地”链接到其他资源,但当已经存在一个社区生长(和不断增长)的非常好的资源时,这是非常愚蠢的:Git社区书。说真的,一个问题中的20多个问题绝对不会简明扼要。Git社区书有HTML和PDF两种格式,可以用清晰、格式良好、经过同行评审的答案回答您的许多问题,并且格式可以让您直接解决手头的问题。

唉,如果我的帖子真的让你不安,我会删除它。说吧。

其他回答

Git重置

假设你做了一个拉,把它合并到你的代码中,然后决定你不喜欢它。使用git-log或tig,找到您想返回的任何位置的哈希(可能是在拉/合并之前的最后一次提交),复制哈希,然后执行以下操作:

# Revert to a previous commit by hash:
git-reset --hard <hash>

您可以使用HEAD^作为上一次提交的快捷方式,而不是哈希。

# Revert to previous commit:
git-reset --hard HEAD^

你是怎么分支的?

git存储库中的默认分支称为master。

创建新分支使用

git branch <branch-name>

查看当前存储库类型中所有分支的列表

git branch

如果您想切换到另一个分支,可以使用

git checkout <branch-name>

一步创建新分支并切换到该分支

git checkout -b <branch-name>

要删除分支,请使用

git branch -d <branch-name>

要使用当前分支的更改创建分支,请执行

git stash
git stash branch <branch-name>

GIT工作流示例。

Git非常灵活,可以很好地适应任何工作流,但不强制执行特定的工作流可能会产生负面影响,使您很难理解除了线性“备份”工作流之外,您可以使用Git做什么,以及分支有多有用。

这篇博文很好地解释了一个非常简单但有效的工作流程,使用git很容易设置。

从博客文章中引用:我们认为origin/master是HEAD源代码始终反映生产就绪状态的主要分支:

工作流已经变得非常流行,可以制作一个实现此工作流的项目:gitflow

很好地说明了一个简单的工作流程,您可以在开发过程中进行所有更改,并且只有在代码处于生产状态时才将其推送给master:

现在让我们假设您想开发一个新功能,或者重构一个模块。您可以创建一个新的分支,我们可以称之为“功能”分支,这需要一些时间,可能会破坏一些代码。一旦您的特性“足够稳定”,并希望将其“更接近”生产,您就将特性分支合并到开发中。当所有的bug在合并后都被清理出来,并且你的代码通过了所有的测试,你就可以将你的更改推到master中。

在所有这些过程中,您会发现一个可怕的安全漏洞,必须立即修复。您可以有一个名为修补程序的分支,它使更改比正常的“开发”分支更快地返回到生产中。

在这里,您可以看到这个特性/修补程序/开发/生产工作流的样子(在博客文章中有很好的解释,我重复一遍,博客文章比我更详细、更好地解释了整个过程)。

Git Magic是你所需要的一切。保证,否则你的钱会回来!

非常好的关于合并冲突的帖子-GitGuys:合并冲突-冲突和解决方案

这个博客真的很棒——说明性的,干净的例子,可以理解。绝对值得一看。