您的位置:首页 > 其它

Git的学习之道

2015-07-25 17:47 489 查看


关于版本控制

(vcs,记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统)

--本地版本控制系统(rcs)

--集中化的版本控制系统(cvcs)

--分布式版本控制系统(dvcs)


Git特性

--直接记录快照,而非差异比较

--近乎所有操作都是本地执行

--时刻保持数据完整性

--多数操作仅添加数据


文件的三种状态

--已提交(committed)

--已修改(modified)

--已暂存(staged))


基本的 Git 工作流程如下:

[code]
  >> step1 在工作目录中修改某些文件。
  >> step2 对修改后的文件进行快照,然后保存到暂存区域。
  >> step3 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。


git常用指令

[code]
 >> git configure [ARGUMENT]        //修改配置参数
 >> git clone 


gitignore文件

--git clone下来的文件内,手动创建.gitignore文件
[code]
  # 此为注释 – 将被 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远程仓库使用

--查看当前的远程库
[code]
>> git remote     //显示远程库名
>> git remote -v     //显示远程库对应的clone地址>


-- 添加远程仓库
[code]
>> git remote add [name] [url]     //指定新的远程库,并且起名


--从远程仓库抓取数据
[code]
>> git fetch [name]     //抓取本地仓库没有,[name]远程仓库有的信息(需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支)
>> git pull [name]     //目的是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。


--推送数据到远程仓库
[code]
>> git push [remote-name] [branch-name]     //将本地仓库中的数据推送到远程仓库


--远程仓库的删除和重命名
[code]
>> git remote rename [old-name] [new-name]
>> git remote rm [name]


打标签

--列显已有的标签
[code]
>> git tag     //列显已有的标签
>> git tag -l [type]     //列显感兴趣的标签


--新建标签

类型:轻量级的(lightweight)和含附注的(annotated)
[code]
>> git tag -a [name] -m [information]     //含附注的标签
>> git tag [name]     //轻量级标签
>> git show [versionNo]     //查看相应版本的标签信息


--后期加注标签
[code]
>> git tag -a [versionNo] [checksum]     //后期加标签


--分享标签
[code]
>> git push origin [tagname]      //显示推送标签
>> git push origin --tags       //推送所有的本地标签


技巧与窍门

--Git 命令别名
[code]
>> git config --global alias.[new-name] [old-name]


Git分支

--分支的新建与切换
[code]
>> git checkout -b [new-branch] => git branch [new-branch] && git checkout [new-branch]


--分支的合并
[code]
>> git checkout master
>> git merge [branch-name]


--分支的删除
[code]
>> git branch -d [branch-name]


--列举所有的分支
[code]
>> git branch 
参数可选
>> -v     //查看各个分支最后一个提交对象的信息
>> --merged     //列出你已经(或尚未)与当前分支合并的分支
>>  --no-merged     //查看尚未合并的工分支


--利用分支进行开发的工作流程

master 稳定的老旧分支,也称长期分支

develop 开发或测试分支

topic 是指一个短期的,用来实现单一特性或与其相关工作的分支,也称特性分支


远程分支

--远程分支
[code]
>> git clone [url]
>> git fetch origin
>> git remote add [package-name] [url]
>> git fetch [package-name]


-- 推送本地分支
[code]
>> git push [remote-package] [branch-name]


--跟踪远程分支
[code]
>> 从远程分支checkout出来的本地分支,称其为跟踪分支,跟踪分支是一种和远程分支有直接关联的本地分支


-- 删除远程分支
[code]
>> git push origin :[branch-name]


--分支的衍合

假设两个分支master和experiment,现在要衍合experiment,就是把experiment里的变化在master中更新一遍,然后合并
[code]
>> 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


未完待续



参考文献:

[url=http://git.oschina.net/progit/]<Git中文文献>" target=_blank> //复制文件仓库到本地目录
>> 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但是要切换到另外一个工作分支的时候,可以使用
[/code]


gitignore文件

--git clone下来的文件内,手动创建.gitignore文件
[code]
  # 此为注释 – 将被 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远程仓库使用

--查看当前的远程库
[code]
>> git remote     //显示远程库名
>> git remote -v     //显示远程库对应的clone地址>


-- 添加远程仓库
[code]
>> git remote add [name] [url]     //指定新的远程库,并且起名


--从远程仓库抓取数据
[code]
>> git fetch [name]     //抓取本地仓库没有,[name]远程仓库有的信息(需要记住,fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支)
>> git pull [name]     //目的是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。


--推送数据到远程仓库
[code]
>> git push [remote-name] [branch-name]     //将本地仓库中的数据推送到远程仓库


--远程仓库的删除和重命名
[code]
>> git remote rename [old-name] [new-name]
>> git remote rm [name]


打标签

--列显已有的标签
[code]
>> git tag     //列显已有的标签
>> git tag -l [type]     //列显感兴趣的标签


--新建标签

类型:轻量级的(lightweight)和含附注的(annotated)
[code]
>> git tag -a [name] -m [information]     //含附注的标签
>> git tag [name]     //轻量级标签
>> git show [versionNo]     //查看相应版本的标签信息


--后期加注标签
[code]
>> git tag -a [versionNo] [checksum]     //后期加标签


--分享标签
[code]
>> git push origin [tagname]      //显示推送标签
>> git push origin --tags       //推送所有的本地标签


技巧与窍门

--Git 命令别名
[code]
>> git config --global alias.[new-name] [old-name]


Git分支

--分支的新建与切换
[code]
>> git checkout -b [new-branch] => git branch [new-branch] && git checkout [new-branch]


--分支的合并
[code]
>> git checkout master
>> git merge [branch-name]


--分支的删除
[code]
>> git branch -d [branch-name]


--列举所有的分支
[code]
>> git branch 
参数可选
>> -v     //查看各个分支最后一个提交对象的信息
>> --merged     //列出你已经(或尚未)与当前分支合并的分支
>>  --no-merged     //查看尚未合并的工分支


--利用分支进行开发的工作流程

master 稳定的老旧分支,也称长期分支

develop 开发或测试分支

topic 是指一个短期的,用来实现单一特性或与其相关工作的分支,也称特性分支


远程分支

--远程分支
[code]
>> git clone [url]
>> git fetch origin
>> git remote add [package-name] [url]
>> git fetch [package-name]


-- 推送本地分支
[code]
>> git push [remote-package] [branch-name]


--跟踪远程分支
[code]
>> 从远程分支checkout出来的本地分支,称其为跟踪分支,跟踪分支是一种和远程分支有直接关联的本地分支


-- 删除远程分支
[code]
>> git push origin :[branch-name]


--分支的衍合

假设两个分支master和experiment,现在要衍合experiment,就是把experiment里的变化在master中更新一遍,然后合并
[code]
>> 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


未完待续



参考文献:

[url=http://git.oschina.net/progit/]<Git中文文献>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: