介绍Git命令操做,必然要说起Github。git
Github是一个基于git的代码托管平台,主要为开发者提供基于git仓库的版本托管服务,并提供一个web界面。github
Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三位开发者在2008年4月创办。 总部位于美国旧金山。web
简单介绍一下Git:shell
Linux的创始人Linus Torvalds在2015年开发了Git的原型程序。数据库
Linux内核的更新速度在全世界也是数一数二。vim
Git 像是把数据看做是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的所有文件制做一个快照并保存这个快照的索引。 为了高效,若是文件没有修改,Git 再也不从新存储该文件,而是只保留一个连接指向以前存储的文件。 Git 对待数据更像是一个 快照流。安全
Git 有三种状态,你的文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 已提交表示数据已经安全的保存在本地数据库中。 已修改表示修改了文件,但还没保存到数据库中。 已暂存表示对一个已修改文件的当前版本作了标记,使之包含在下次提交的快照中。bash
基本的 Git 工做流程以下:网络
- 在工做目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
Git官方文档编辑器
$ git config user.name
$ git config user.email
复制代码
$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com"
复制代码
也能够经过git的配置文件"~/.gitconfig"进行修改
$ git config --global color.ui auto
复制代码
$ git config --global color.ui auto
这个命令至关于
$ git config --global color.diff auto
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color interactive auto
复制代码
$ git config --list
复制代码
若你使用 Git 时须要获取帮助,有三种方法能够找到 Git 命令的使用手册:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
复制代码
例如,要想得到 config 命令的手册,执行
$ git help config
复制代码
打开Github,打开须要拷贝的仓库连接,点击右侧按钮:Clone or download,得到一个git地址(例如:git@github.com:user-name/new-repository.git)
$ git clone git@github.com:user-name/new-repository.git
Cloning into 'new-repository'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
$ cd new-repository
复制代码
注意:这里会要求输入GitHub上设置的公开密钥的密码,认证后,仓库便会被clone到仓库名后的目录中,将想要公开的代码提交至这个仓库再push到GitHub的仓库中,代码便会被公开。
进行Git初始化
,会获得一个**.git目录,这个.git目录里存储管理当前目录内容所须要的仓库数据,又叫"附属于该仓库的工做树"**:$ git init
查看当前Git仓库的状态和所在分支:$ git status
提交代码(若是是add . 则说明是提交的全部改变过的文件,不然须要根据单独的文件名分别上传):$ git add .
保存仓库的历史记录(将当前暂存区的文件世纪保存到仓库的历史记录中,以便往后在工做树中复原文件),记述一行提交信息:$ git commit -m "提交信息的概述"
若是发现备注不够恰当,要修改上一条提交的备注信息:$ git commit --amend
若是想要记录更详细的提交信息,请不要 -m,直接使用$ git commit
,执行后,VI的编辑模式会自动启动,会看到:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage) #
# new file: README.md
#
复制代码
在编辑器中记述提交信息的格式以下:
第一行:用一行文字简述提交的更改内容
第二行:空行
第三行之后:记述更改的缘由和详细内容
如图所示:
编辑完成后,退出VI模式,按esc
/再打:wq
,保存并退出,而后再经过 $ git log 查看刚刚提交的记录
查看提交信息:$ git log
只显示第一行提交信息:$ git log \-\-pretty=short
只显示指定目录、文件的日志:$ git log 某文件名
显示文件的改动,会对比文件的先后差异:$ git log -p
显示具体文件的改动,会对比文件的先后差异:$ git log -p 文件名
$ git reflog
查看更改先后的差异(查看工做树、暂存区、最新提交之间的差异):$ git diff
其中:
查看工做树和最新提交的差异(养成好习惯,git commit以前先执行git diff HEAD):$ git diff HEAD
提交代码:$ git push
经过master分支提交到远程:$ git push -u origin "master"
查看所在分枝:$ git
切换分枝:$ git checkout \-\-master
此处咱们简单了解一下VI的几个命令,后面将会详细介绍VI环境的四种模式。
a 光标以后插入/ A 行尾插入
i 光标以前插入/ I 行首插入
o 下一行插入 /O 上一行插入
:
连按两次大写Z
:w
:q
:wq
:q!
更详细的vi/vim的介绍及相关命令请参考个人另外一篇文章:vim 小总结
当进行多个并行做业时,咱们会用到分枝。在这类并行开发的过程当中,每每同时存在多个最新的代码状态。
不一样分支中,能够同时进行彻底不一样的做业,等该分支的做业完成以后再与master分支合并。
![]()
![]()
分支又分为:
查看本地分支(带星号的为当前分支):$ git branch
查看远程仓库+本地仓库的分支信息:$ git branch -a
建立并切换分枝:$ git checkout -b 分支名
建立分枝:$ git branch 分支名
切换分枝:$ git checkout 分支名
切换回上一个分支:$ git checkout -
合并分支:切换回master分支,$ git merge \-\-no-ff 须要合并的分支名
合并分支,须要各个分支先在各分支的领域里提交代码至远程仓库,然后由master分支对各个分支提交的内容进行合并。
合并某分支到当前分支:$ git merge <name>
删除分枝:$ git branch -d
强制删除分枝:$ git branch -D
以图表形式查看分支(能够看到各分支的合并状态,清楚明了):**$ git log \-\-graph**
回溯历史版本:$ git reset
回溯到某个指定状态:$ git reset --hard 哈希值
查看当前仓库的操做日志(从日志中找到哈希值)
:**$ git reflog**
消除冲突:
例如:
# Git教程
<<<<<<< HEAD
- feature-A 复制代码
======= - fix-B
>>>>>>> fix-B
=======以上的部分是当前HEAD的内容,如下的部分是要合并的 fix-B 分支中的内容。
实际开发过程当中,每每须要删除其中之一,因此在处理时,须要仔细分析冲突部分再修改。
解决冲突后,执行 $ git add 与 $ git commit 命令。
修改已经提交了的备注信息(此处须要懂一些vim的相关命令常识):\$ git commit \-\-amend
执行 git commit --amend 后,编辑器会启动,按esc
再按 i
,进入insert插入模式,修改好后,再点击esc
,打:x
,保存并退出。
修改并保存退出后,执行$ git log \-\-graph
命令,查看日志中的内容是否修改为功
压缩提交历史:$ git rebase -i
不少咱们提交了例如 拼写错误等内容的修改,对于整个项目版本追溯的意义并不大,咱们并不但愿在历史记录中看到这类提交,所以能够选择使用合并历史提交记录的方式,将此记录与上一次有意义的提交记录合并为一次完美的提交
例如:git rebase -i HEAD-2
实际,git rebase -i HEAD-2 的做用是选定当前分支中包含HEAD在内的2个最新历史记录为对象,打开编辑器,进行备注信息的修改,修改完后保存并退出编辑器,再经过git log --graph查看,会发现,哈希值已经不是原来的了。
合并git add 和 git commit 这两个命令:$ git commit -am '备注内容'
对比修改文件:$ git diff
添加远程仓库到本地
(执行git remote add后,git会自动将git@github.com:/…远程仓库的名称设置为origin(标识符)):
$ git remote add origin git@github.com:user/new-repository.git
复制代码
推送至远程仓库:$ git push -u origin master
-u 参数能够在推送的同时,将origin仓库的master分支设置为本地仓库当前分支的upstream(上游)。
添加了这个参数,未来运行git pull命令从远程仓库获取内容时,本地仓库的这个分支就能够直接从roigin的master分支获取内容,省去了另外添加参数的麻烦。
推送master意外的分支:
先切换到其余分支
$ git checkout -b 分支名
再从意境切换到的分支上进行推送
$ git push -u origin 分支名
复制代码
获取远程仓库:$ git clone git@github.com:...
查看当前分支信息(本地和远程origin):$ git branch -a
-a 参数能够同时显示本地仓库和远程仓库的分支信息
获取远程仓库的feature-D分支:$ git checkout -b feature-D origin/feature-D
获取最新的远程仓库分支:$ git pull origin feature-D
vi/vim的介绍及相关命令请参考个人另外一篇文章:vim 小总结