Git简单使用笔记

前段时间参加了生物信息学创新协作小组 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转载请注明出处