Git是当今最流行的版本控制工具。这几年GitHub也干掉了GoogleCode和Sourceforge,从三大代码仓库中脱颖而出,除了GitHub自身的优秀外,Git也是功不可没。git
为什么Git如此出众呢?这是由于Git保存的不是文件的变化或者差别,而是一系列不一样时刻的文件快照,同时支持分支模型。Git处理分支的方式可谓是难以置信的轻量,建立新分支这一操做几乎能在瞬间完成,而且在不一样分支之间的切换操做也是同样便捷。与许多其它版本控制系统不一样,Git鼓励在工做流程中频繁地使用分支与合并,哪怕一天以内进行许屡次。程序员
这里,我简单地总结一了下Git的命令行命令数据库
本地仓库操做
在现有目录中初始化仓库
若是你打算使用 Git 来对现有的项目进行管理,你只须要进入该项目目录并输入:服务器
git init
该命令将建立一个名为.git的子目录,这个子目录含有你初始化的Git仓库中全部的必须文件,这些文件是Git仓库的骨干。网络
列出git的所有配置信息
git config --list
列出git的帮助命令
git help
状态简览
能够查看修改状态编辑器
git status
也可使用git status -s命令或git status --short命令,你将获得一种更为紧凑的格式输出。ide
git status -s
实现对指定文件的跟踪,而后执行git commit暂存已修改文件
git add xxx git commit -m 'initial project version'
暂存已修改文件
Git能够暂存一个已跟踪文件的修改记录,其实只不过暂存了运行git add命令时的版本,若是如今提交,提交文件的版本是你最后一次运行git add命令时的那个版本,而不是运行git commit时,在工做目录中的当前版本。因此,运行了git add以后又做了修订的文件,须要从新运行git add把最新版本从新暂存起来工具
git add xxx git commit
移除文件
要从Git中移除某个文件,就必需要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),而后提交。能够用git rm命令完成此项工做,并连带从工做目录中删除指定的文件,这样之后就不会出如今未跟踪文件清单中了。测试
移动文件
运行git mv就至关于运行了下面三条命令:fetch
mv README.md README git rm README.md git add README
同时可使用mv命令实现修改文件名称。不论是直接使用git mv仍是使用上述三个操做,Git都会意识到这是一次更名,因此无论何种方式结果都同样。二者惟一的区别是,mv是一条命令而另外一种方式须要三条命令,直接用git mv轻便得多。
查看已暂存和未暂存的修改
git diff命令让你知道当前作的哪些更新尚未暂存,同时也能够知道有哪些更新已经暂存起来准备好了下次提交。
git diff
提交修改
如今的暂存区域已经准备稳当能够提交了。在此以前,请必定要确认还有什么修改过的或新建的文件尚未git add过,不然提交的时候不会记录这些还没暂存起来的变化。
这些修改过的文件只保留在本地磁盘。因此,每次准备提交前,先用git status看下,是否是都已暂存起来了,而后再运行提交命令git commit
git commit
这种方式会启动文本编辑器以便输入本次提交的说明。会启用默认指定的软件编辑,能够按照,使用git config --global core.editor命令设定指定的编辑软件。
另外,你也能够在 commit 命令后添加 -m 选项,将提交信息与命令放在同一行
给git commit加上-a选项,Git 就会自动把全部已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤
查看提交历史
在提交了若干更新,又或者克隆了某个项目以后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是git log命令。
git log
撤销提交
在任何一个阶段,都有可能想要撤消某些操做,有些撤消操做是不可逆的。
有时候咱们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。此时,能够运行带有--amend选项的提交命令尝试从新提交
git commit -m 'initial commit' git add forgotten_file git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
取消暂存的文件
已经修改了两个文件而且想要将它们做为两次独立的修改提交,可是却意外地输入了git add *暂存了它们两个。如何只取消暂存两个中的一个呢?
可使用git reset HEAD撤销一次提交
Git 分支
几乎全部的版本控制系统都以某种形式支持分支。 使用分支意味着你能够把你的工做从开发主线上分离开来,以避免影响开发主线。
Git保存的不是文件的变化或者差别,而是一系列不一样时刻的文件快照。而所谓的Git分支,就是指向一个快照的指针。
分支建立
Git的默认分支名字是master。咱们能够建立新的分支。好比,建立一个testing分支,只须要使用git branch命令:
git branch testing
同时有一个名为HEAD的特殊指针,指向当前分支。
查看全部分支
使用git branch命令能够查看全部分支,当前分支(HEAD指向的分支)前面会带有*
git branch * master testing
分支切换
要切换到一个已存在的分支,你须要使用 git checkout 命令。 咱们如今切换到新建立的 testing 分支去:
git checkout testing
这样 HEAD 就指向 testing 分支了。
你能够在不一样分支间不断地来回切换和工做,并在时机成熟时将它们合并起来。而全部这些工做,你须要的命令只有branch、checkout 和commit。
合并分支
git能够将当前分支合并回其余分支。可使用git merge命令来达到上述目的:
git checkout merge git merge testing
变基
rebase(变基)命令将提交到某一分支上的全部修改都移至另外一分支上,就好像“从新播放”同样。
简单来讲:merge操做会生成一个新的节点,以前的提交分开显示。而rebase操做不会生成新的节点,是将两个分支融合成一个线性的提交。
git checkout merge git rebase testing
删除分支
可使用带-d选项的git branch命令来删除分支:
git branch -d testing
远程仓库操做
为了能在任意Git项目上协做,你须要知道如何管理本身的远程仓库。远程仓库是指托管在因特网或其余网络中的你的项目的版本库。
一个项目能够有好几个远程仓库,一般有些仓库对你只读,有些则能够读写。远程仓库须要有个名字,origin是Git给你克隆的仓库服务器的默认名字
与他人协做涉及管理远程仓库以及根据须要推送或拉取数据。管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不一样的远程分支并定义它们是否被跟踪等等。
克隆远程仓库
git clone命令会自动设置本地master分支跟踪克隆的远程仓库的master分支。运行git pull一般会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
查看远程仓库
若是想查看你已经配置的远程仓库服务器,能够运行git remote命令。它会列出你指定的每个远程服务器的简写。
添加远程仓库
运行git remote add
从远程仓库中抓取与拉取
从远程仓库中得到数据,能够执行
git fetch [remote-name]
这个命令会访问远程仓库,从中拉取全部你尚未的数据。执行完成后,你将会拥有那个远程仓库中全部分支的引用,能够随时合并或查看。
推送到远程仓库
git push origin master
只有当你有所克隆服务器的写入权限,而且以前没有人推送过期,这条命令才能生效。当你和其余人在同一时间克隆,他们先推送到上游而后你再推送到上游,你的推送就会毫无疑问地被拒绝。你必须先将他们的工做拉取下来并将其合并进你的工做后才能推送。
查看远程仓库
若是想要查看某一个远程仓库的更多信息,可使用 git remote show [remote-name] 命令。
远程仓库的移除与重命名
若是想要重命名引用的名字能够运行git remote rename去修改一个远程仓库的简写名
值得注意的是这一样也会修改你的远程分支名字
若是由于一些缘由想要移除一个远程仓库,可使用git remote rm
远程分支
当你切换了本地分支,可是在push的时候,不指定分支,事实上仍是在向默认的origin/master。
所以若是你但愿你的分支可以被提交到远程服务器上,让其余人也能看到他。须要执行git push (remote) (branch),例如:
git push origin testing
这样在远程服务器上便建立了origin/testing分支。
删除远程分支
能够运行带有--delete选项的git push命令来删除一个远程分支。
git push --delete origin testing
分支 - 分支开发工做流
一般咱们在使用Git的时候,都会在master分支上保留彻底稳定的代码——有可能仅仅是已经发布或即将发布的代码。
同时还有一些名为develop的平行分支,被用来作后续开发或者测试稳定性——这些分支没必要保持绝对稳定,可是一旦达到稳定状态,它们就能够被合并入 master 分支了。
这样,在确保这些已完成的特性分支可以经过全部测试,而且不会引入更多 bug 以后,就能够合并入主干分支中,等待下一次的发布。
同时高水平的程序员也能够在review水平较低的程序员后,再合并代码。
这个过程咱们叫Git工做流
Git 标签
Git能够给历史中的某一个提交打上标签,以示重要
列出标签
git tag
建立标签
Git使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
一个轻量标签很像一个不会改变的分支 - 它只是一个特定提交的引用。
附注标签是存储在 Git 数据库中的一个完整对象。能够包含打标签者的名字、电子邮件地址、日期时间等等
附注标签
在Git中建立一个附注标签是很简单的。最简单的方式是当你在运行tag命令时指定-a选项。-m选项指定了一条将会存储在标签中的信息。
git tag -a v1.4 -m 'my version 1.4' git tag v0.1 v1.3 v1.4
轻量标签
另外一种给提交打标签的方式是使用轻量标签。建立轻量标签,不须要使用-a、-s或-m选项,只须要提供标签名字。
共享标签
git push命令并不会传送标签到远程仓库服务器上。在建立完标签后你必须显式地推送标签到共享服务器上。能够运行
git push origin [tagname]
检出标签
在Git中不能真的检出一个标签,由于它们并不能像分支同样来回移动。若是想要工做目录与仓库中特定的标签版本彻底同样,可使用
git checkout -b [branchname] [tagname]
这实际是在特定的标签上建立一个新分支