Git是一个快速、灵活但具有挑战性的分布式版本控制系统。跳入前:
连同书,辅导的和备忘单,以下是帮助git点击的见解。
有一个中转区!
Git有一个集结区。Git有一个临时区域!!!
尤扎,这有没有把我搞糊涂了。有一个repo(“对象数据库”)和一个临时区域(称为“索引”)。签入有两个步骤:
git添加foo.txt
git commit-m“消息”
- 将暂存文件放入回购中;他们现在被跟踪了
- 你可以“
git添加--更新“
暂存所有已跟踪、修改的文件
为什么选择舞台?Git很灵活:如果a、b和c被更改,您可以单独或一起提交它们。
但现在有两种结局:
git签出foo.txt
git重置HEAD foo.txt
添加并提交、添加并提交——Git有节奏。
分支是“另存为…”
分支类似于目录中的“另存为…”。最棒的是:
- 轻松将更改与原始更改合并(更改已跟踪且从未应用过两次)
- 没有浪费空间(普通文件只存储一次)
为什么要分支?考虑一下常规文件的“另存为…”实用程序:您可以在保持原始文件安全的同时修改多种可能性。Git为目录启用了这一功能,并具有合并功能。(实际上,svn就像一个共享驱动器,您只能恢复到一个备份)。
想象一下虚拟目录
我将分支视为.git文件夹中的“虚拟目录”。在物理目录(c:\project或~/project)中,可以通过签出遍历虚拟目录。
切换到主分支
git分支开发
- 从现有分支创建新分支(“cp*dev”)
- 您仍然需要使用“git checkout dev”来“cd”
git合并开发
- (在master中时)从dev中拉入更改(“cp-dev/*.”)
git分支
我的内部对话是“更改到开发目录(签出)…进行更改…保存更改(添加/提交)…更改到主目录…从开发复制更改(合并)”。
物理目录是草稿行。虚拟目录受git命令的影响:
rm文件夹.txt
- 从沙盒中删除foo.txt(如果再次签出分支,则会恢复)
git rm foo.txt文件
- 从当前虚拟目录中删除foo.txt
- 明白了:你需要做出改变!
了解当前分支机构
就像查看当前目录一样,在提示符中输入当前分支!
在my.bash_profile中:
解析git_branch(){git分支2>/dev/null|sed-e'/^[^*]/d'-e's/*(.*)/(1)/'}导出PS1=“[33[00m]u@h[33[01;34m]W[33[31m]$(parse_git_branch)[33[0m]$[33[000m]”
可视化分支结构
Git将分支机构留给您。Nvie.com有一个大分行战略:
- 有一条主线。心理上它在最右边。
- 创建分支(master->dev)和子分支(dev->featureX)。离主人越远,越疯狂。
- 仅与邻居合并(master->dev->feature X或featureX->dev->master)
通过选择前面的分支布局来保持理智。我有一个跟踪svn项目的master,还有我自己代码的dev。总的来说,master是干净的,所以我可以随时进行分支以进行一次性修复。
了解本地与远程
Git具有本地和远程命令;看到这两件事,我很困惑(“你什么时候结账,什么时候拉?”)。在本地工作,根据需要远程同步。
本地数据
初始化
- 创建本地回购
- 使用git添加/提交/分支在本地工作
远程数据
git远程添加名称repo路径
- 从现有回购跟踪远程回购(通常为“来源”)
- 远程分支是“origin/master”、“origin/dev”等。
查看所有的分支
git克隆到repo的路径
- 创建一个从远程复制的新本地git回购
- 本地主机跟踪远程主机
吉特拉力
- 合并来自跟踪的远程分支的更改(如果在dev中,则从源站/dev拉入)
git推送
- 将更改发送到跟踪的远程分支(如果在dev中,则推送到origin/dev)
为什么选择本地和远程?Subversion具有集中签入功能,因此您可以避免提交未完成的工作。使用git,本地提交非常频繁,只有在准备就绪时才进行推送。
GUID很好
Git通过散列处理信息(GUID(GUID))它的内容。如果两个分支相同,则它们具有相同的GUID(反之亦然)。
为什么这么酷?我们可以独立创建分支,合并它们,并有一个通用的GUID。无需中央编号。通常,我们只比较前几个数字:“你在a93上吗?”。
提示和技巧
对于您的.gitconfig:
[别名]ci=提交st=状态co=校验oneline=log--pretty=onelinebr=分支机构la=log--pretty=“格式:%ad%h(%an):%s”--日期=short
有一些用于git的GUI工具,但我更喜欢通过命令行学习。Git是一个固执己见的软件(我喜欢),类比帮助我理解它的世界观。
本系列其他帖子
- 版本控制可视化指南
- 分布式版本控制简介(图解)
- 啊哈!学习Git的时刻