关于版本控制
(vcs,记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统)
--本地版本控制系统(rcs)
--集中化的版本控制系统(cvcs)
--分布式版本控制系统(dvcs)
Git特性
--直接记录快照,而非差异比较
--近乎所有操作都是本地执行
--时刻保持数据完整性
--多数操作仅添加数据
文件的三种状态
--已提交(committed)
--已修改(modified)
--已暂存(staged))
基本的 Git 工作流程如下:
>> step1 在工作目录中修改某些文件。
>> step2 对修改后的文件进行快照,然后保存到暂存区域。
>> step3 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。
git常用指令
>> git configure [ARGUMENT] //修改配置参数
>> git clone [url] //复制文件仓库到本地目录
>> git add [FILENAME] //添加文件内容到工作树索引
>> git status //查看工作树的状态
>> git diff //查看尚未暂存的文件更新了哪些部分
>> git rm [FILENAME] //从工作树索引中移除文件
>> git commit //提交,也可以-m 参数后跟提交说明的方式,跟--amend表示重新提交
>> git mv ->git rm && git add //git改名操作相当于git删除一次然后添加一次
>> git log //默认不用任何参数的话,会按提交时间列出所有的更新,最近的更新排在最上面
>> git log --pretty=format:"%h - %an, %ar : %s" //添加参数之后会有更好的观察效果
>> git reset HEAD [FILENAME] //取消暂存文件
>> git checkout --[FILENAME] //取消对于文件的修改
>> git stash //当我们未做完一件事不能commit但是要切换到另外一个工作分支的时候,可以使用
gitignore文件
--git clone下来的文件内,手动创建.gitignore文件
# 此为注释 – 将被 Git 忽略
# 忽略所有 .a 结尾的文件
*.a
# 但 lib.a 除外
!lib.a
# 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
/TODO
# 忽略 build/ 目录下的所有文件
build/
# 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
# ignore all .txt files in the doc/ directory
doc/**/*.txt
Git远程仓库使用
--查看当前的远程库
>> git remote //显示远程库名
>> git remote -v //显示远程库对应的clone地址>
-- 添加远程仓库
>> git remote add [name] [url] //指定新的远程库,并且起名
--从远程仓库抓取数据
>> git fetch [name] //抓取本地仓库没有,[name]远程仓库有的信息(需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支)
>> git pull [name] //目的是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。
--推送数据到远程仓库
>> git push [remote-name] [branch-name] //将本地仓库中的数据推送到远程仓库
--远程仓库的删除和重命名
>> git remote rename [old-name] [new-name]
>> git remote rm [name]
打标签
--列显已有的标签
>> git tag //列显已有的标签
>> git tag -l [type] //列显感兴趣的标签
--新建标签
类型:轻量级的(lightweight)和含附注的(annotated)
>> git tag -a [name] -m [information] //含附注的标签
>> git tag [name] //轻量级标签
>> git show [versionNo] //查看相应版本的标签信息
--后期加注标签
>> git tag -a [versionNo] [checksum] //后期加标签
--分享标签
>> git push origin [tagname] //显示推送标签
>> git push origin --tags //推送所有的本地标签
技巧与窍门
--Git 命令别名
>> git config --global alias.[new-name] [old-name]
Git分支
--分支的新建与切换
>> git checkout -b [new-branch] => git branch [new-branch] && git checkout [new-branch]
--分支的合并
>> git checkout master
>> git merge [branch-name]
--分支的删除
>> git branch -d [branch-name]
--列举所有的分支
>> git branch
参数可选
>> -v //查看各个分支最后一个提交对象的信息
>> --merged //列出你已经(或尚未)与当前分支合并的分支
>> --no-merged //查看尚未合并的工分支
--利用分支进行开发的工作流程
master 稳定的老旧分支,也称长期分支
develop 开发或测试分支
topic 是指一个短期的,用来实现单一特性或与其相关工作的分支,也称特性分支
远程分支
--远程分支
>> git clone [url]
>> git fetch origin
>> git remote add [package-name] [url]
>> git fetch [package-name]
-- 推送本地分支
>> git push [remote-package] [branch-name]
--跟踪远程分支
>> 从远程分支checkout出来的本地分支,称其为跟踪分支,跟踪分支是一种和远程分支有直接关联的本地分支
-- 删除远程分支
>> git push origin :[branch-name]
--分支的衍合
假设两个分支master和experiment,现在要衍合experiment,就是把experiment里的变化在master中更新一遍,然后合并
>> git checkout experiment //切换experiment分支
>> git rebase master //在master中更新变化
>> git rebase master experiment //等同于上面的两条命令
>> git checkout master // 切换master分支
>> git merge experiment //合并experiment
>> git branch -d experiment //删除experiment分支
三条链a b c衍合a c
>> git rebase --onto a b c
注意:一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。
服务器上的Git
未完待续