前段时间参加了生物信息学创新协作小组 Openbiox 中的XenaShiny开发小组(主要根据Xena数据库的API,以shiny app形式展示,提供数据下载及相关分析等功能,已打包成R包可供下载安装),第一次参与协作开发任务,才发现自己原来所掌握的Git知识点还是过于简单了,因此买了本Git相关书籍从头了解下,并做笔记以便查阅(当然有时翻书更加方便) 刚好最近也打算开始好好整整Github仓库
初始化版本库
建立初始版本库有两种方法:从头开始创建或者克隆一个已有的版本库,下面是从头创建,执行后会有个.git隐藏文件夹
git init
查看版本库状态
使用git status
查看版本库状态(非常常用),Git将所有文件分成3类:已追踪的(Tracked)、被忽略的(Ignored)以及未追踪的(Untracked)
echo "New data" > data
git status
如果有些文件不想做追踪,想让Git忽略目录中的某些文件,只需要将其添加到.gitignore
中即可
touch main.o
git status
echo main.o > .gitignore
git status
添加/删除文件到版本库
使用git add
添加文件到版本库,添加当前目录全部文件可用.
表示,上述data文件从Untracked变成了to be committed;使用git add
后,文件被暂存和追踪,准备在下个提交的时候加到版本库中;每个文件可被SHA1值来索引
git add data .gitignore
git git status
git ls-files --stage
接下来提交的是索引中的暂存的文件,而不是目录中的文件,因此有时工作目录下的文件版本会跟索引中的不一致;使用git commit
来执行提交,如果使用git commit --all
,Git会历遍整个版本库,暂存所有已知的和修改的文件,然后提交它们
git commit -m "first-operation"
git status
如果想在版本库和工作目录中同时删除文件,可以用git rm
命令;如果文件已修改但未提交,可用git rm -f
来强制删除
git rm data
git ls-files --stage
如果想找回已删除文件,还是可以恢复回来的
git checkout HEAD -- data
如果是只从工作目录中删除,那么rm
即可,但是这样做的话,索引还是存在的即已暂存;如果想从已暂存转化为未暂存,则可以使用git rm --cached
touch temp
git add temp
git status
git rm --cached temp
git status
文件重命名
使用git mv
对文件进行重命名
git add data
git mv data mydata
查看提交日记
使用git log
查看提交日记
git commit -m "my-data"
git log mydata
Git允许很多分支,因此在同一个版本库中可以有许多个不用的开发县。默认每次你提交到Git的文件都会被储存到master(主干)分支
分支操作
创建分支,用git branch
命令,默认是在当前工作的分支上的最近提交启动一个新的分支
git branch dev-kgu
用git branch
列出分支名,星号*
开头的分支表示当前已检出的分支
git branch
查看分支,用git show-branch
,其提供更加详细的分支信息输出,按时间以递序的形式列出对一个或对个分支有贡献的提交,结果显示如下:
$ git show-branch
! [dev-kgu] my-data
* [master] my-data
--
+* [dev-kgu] my-data
结果形式被一排破折号分为两部分,上方的部分列出分支名,星号()代表当前分支,不然以感叹号(!)标记;下方则是每个分支的提交矩阵,会看到有加号(+)、星号()或减号(-)出现的开头,其含义为:加号表示提交在一个分支中,星号突出显示存在于当前活动分支的提交,减号表示一个合并提交
检出分支,用git checkout
,值得注意的是:如果工作目录中有文件修改但未提交则会报错
git checkout dev-kgu
如果不愿意保留上述修改,则可以加-f
强制执行检出;如果想将修改保留在当前分支的话,则需要先git commit
;如果想将修改保留在新检出的分支上,则需要加-m
参数,如:
git checkout -m dev-kgu
如果主分支上修改了文件,并想将该修改提交到分支上,那么只需要在文件修改后对分支进行检出即可
创建并检出新分支,可以将创建-检出写成一行命令git checkout -b new-branch
删除分支,加-d
参数
git checkout -d dev-kgu
如果需要将分支的内容合并到主分支上,则需要用到git merge
命令,比如将dev-kgu分支合并到master主分支上
git checkout master
git merge dev-kgu
如有冲突的合并,Git并不解决冲突,这通常出现在对同个文件的同一处进行修改的时候;Git把这种争议性的修改在索引中标注为unmerged
diff操作
git diff
也是一个比较常用的命令,用于查看工作目录、索引、HEAD之间的差别:
- 如工作目录与索引:
git diff
- 工作目录和HEAD:
git diff HEAD
- 索引和HEAD:
git diff --cached
更改提交
更改提交在Git操作中很普遍,可以让版本库中某个提交的工作目录、索引及HEAD进行修改
git reset
有以下三点用法:
git reset --soft
会将HEAD引用指向给定提交,索引和工作目录的内容保持不变git reset --mixed
会将HEAD引用指向给定提交,索引内容也跟着改变,而工作目录的内容保持不变git reset --hard
会将HEAD引用指向给定提交,索引内容和工作目录的内容也跟着改变
git cherry-pick
可以在不改变版本库中的现在历史记录,而是添加历史记录
git revert
用于引入一个新提交来抵消给定提交的影响,不修改版本库的现存历史记录,常见用途是撤销历史记录中的某个提交的影响
修改最新提交,即改变当前分支最近一次提交可用git commit --amend
git rebase
命令是用来改变一串提交以什么为基础的
git rebase master branch
推送至远程仓库
用git push
命令可将当前master分支推送到origin远程版本库
git push -u origin master
如果要推送分支,则
git push -u origin dev-kgu
如果想从远程仓库中拉一份克隆,可用git clone
命令
如果想获取远程的分支,即将远程分支dev-kgu克隆到本地并命名为dev-kgu,可以在git clone
后,再git checkout -b dev-kgu origin/dev-kgu
git pull
命令可以拉取远程仓库更新本地仓库,如拉取远程仓库的分支来更新本地分支
git pull origin dev-kgu
以上内容均为书籍及网上资料所整理的,一些常用的命令简单的解释,具体Git原理以及每个命令对应的详细解释推荐看书籍效果更好哈
本文出自于http://www.bioinfo-scrounger.com转载请注明出处