Learn Process
创建版本库
1 | git init 把目录变成Git可以管理的仓库, .git是版本库 |
添加文件到仓库
1 | git add 将文件提交到暂存区 |
查看仓库的状态
1 | 掌握仓库当前的状态 |
提交日志
HEAD -> master
标识当前分支的HEAD的位置, origin/master
标识出远程origin的位置
1 | 显示从最近到最远的提交日志 |
回溯
1 | 将当前版本回溯到以前的一个版本, 上一个版本HEAD^, 以此类推, 也可以写成HEAD~<num> |
撤销与删除
1 | 丢弃工作区的修改, 注意"--" |
远程仓库
1 | 将本地仓库与远程关联 |
多人协作
master分支是主分支, 要时刻与远程同步;
1 | 查看远程库信息 |
工作模式
- 试图推送
- 推送失败, 先用git pull试图合并
- 合并有冲突, 解决冲突, 并在本地提交
- 没有冲突后, 提交
分支
1 | 创建并切换分支 |
最新版本的Git的新的切换命令:
1 | 创建并切换分支 |
新建的分支使用完成后, 应该删除:
1 | 将<new>分支合并并记录分支信息(禁用FF) |
分支策略:
master分支应该稳定, 应仅用来发布新版本
分支是不稳定的, 在新版本发布时, 把 分支合并到master上 每个人应在
分支再次分支, 可以每时的在 分支合并
Bug分支
储藏当前工作:
1 | 应用于临时工作 |
创建Bug分支:
1 | 需要创建临时分支, 确认需要在哪个分支上创建分支 |
恢复到之前储藏工作:
1 | git checkout <name> |
将修改Bug的分支的提交复制到其他分支:
1 | 复制一个特定的提交到当前分支 |
Feature分支
用于添加新功能, 新建Feature分支:
1 | 要丢弃一个没有被合并过的分支(其中有未提交文件) |
Rebase变基
将本地的提交放到了分支之后, 使得整个提交历史变成一条直线, rebase操作前后, 最终的提交内容是一致的. 本地的commit修改内容已经变化了, 它的修改不再基于分支起点, 而是基于合并后的分支, 但最后的提交内容是一致的.
缺点: 本地的分支提交已经被修改过了.
1 | git rebase |
使用情形和原则
只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变基操作, 因为变基操作会改变提交历史记录.
1 | 基于远程分支origin, 创建一个test分支 |
标签管理
标签可以确定打标签时刻的版本, 所以, 标签也是版本库的一个快照(标签就是指向某个commit的指针). 默认标签是打在最新提交的commit上的.
标签不是按照时间顺序列出, 而是按照字母排序.
1 | 切换要打标签的分支 |
标签总是和某个commit挂钩. 如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签.
操作标签
创建的标签都只存储在本地, 不会自动推送到远程.
1 | 删除标签 |
自定义Git
忽略原则(版本管理)
忽略操作系统自动生成的文件,比如缩略图等.
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的
.class
文件.忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件.
1 | 使Git显示颜色(文件名颜色显示) |