Git的使用以及常用命令
1 基础概念
1.1 Git的介绍
Git是一个版本控制系统,用来追踪计算机文件的变化的工具,也是一个供多人使用的协同工具。它是一个分布式的版本控制系统,简单的说,就是多人完成一个任务,并且可以查看历史版本等。
这篇文章不再注重将Git的实现原理,而是重在使用。由于Git是一个分布式的版本控制系统,所以一般采用一个服务器方便大家交换修改用的。每个人本地都有一个版本库,当把自己版本库的修改提交到远程服务器上,别人就可以获取到你的修改。因此,Git的版本库(Repository)对于每个人来说有两个,一个是远程的,一个是本地的。
2 Git的初始化
2.1 Git的下载安装
想要在自己的电脑上使用Git
,首先需要在个人电脑上安装Git
。下载链接如下:
windows安装地址:https://github.com/git-for-windows/git/releases/download/v2.23.0.windows.1/Git-2.23.0-64-bit.exe
mac安装地址:https://sourceforge.net/projects/git-osx-installer/files/git-2.23.0-intel-universal-mavericks.dmg/download?use_mirror=autoselect
接下来就是傻瓜式安装了,一直点击下一步就ok了。
测试是否安装成功:
点击 Git Bash出现命令窗口就表示安装也已经ok了。
2.2 Git基本信息配置
在初次运行Git
需要设置用户名称与邮件地址,这样做很重要,因为每一个 Git
的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
$ git config --global user.name "zhangsan"
$ git config --global user.email 'zhangsan@qq.com'
再次强调,如果使用了–global
选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情,Git 都会使用那些信息。当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 –global 选项的命令来配置。
2.3 检查配置信息
如果想要检查配置信息,可以使用 git config –list
命令来列出所有Git
当时能找到的配置。
$ git config --list
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
help.format=html
user.name=zhangsan
user.email=zhangsan@qq.com
...
也可以通过输入 git config
来检查Git
的某一项配置:
$ git config user.name
zhangsan
2.4 获取帮助
当你使用Git
的时候,可能会需要帮助,有三种方法可以找到Git
命令的使用手册:
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
比如想要获得config命令的手册,可以输入:
$ git help config
安装和初始配置都已经设置好了,下面就来看看具体的应用了。
3 Git的使用
3.1 获取Git仓库
有两种获取Git仓库的方法,一是在现有项目或目录下导入所有文件到Git中;二是从一个服务器克隆一个现有的Git仓库。
- 在现有目录中初始化仓库
进入该项目的目录下,点击鼠标右键,进入 Git Bash
,然后输入:
$ git init
该命令会创建一个名为.git
的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的核心。
- 克隆现有项目
如果想要直接克隆远程仓库,可以直接使用 git clone [url]
$ git clone https://github.com/libgit/libgit
该命令执行结束后会在当前目录下创建一个名为
libgit
的目录,并在在这个目录下初始化一个.git
文件夹,从远程仓库拉取所有的数据放在改文件夹,然后从中读取最新版本的文件的拷贝。进入到libgit
目录下,会发现所有的项目文件都已经在里面了,请将https://github.com/libgit/libgit 替换为你自己的Git仓库地址。
Git 支持多种数据传输协议。 上面的例子使用的是https:// 协议,不过你也可以使用 git:// 协议或者使用SSH 传输协议,比如 user@server:path/to/repo.git 。
3.3 Git的常见命令的使用
查看
、添加
、提交
、删除
、找回
,重置修改文件
# 显示command的help
$ git help <command>
# 显示某次提交的内容
$ git show
$ git show $id
# 抛弃工作区修改
$ git co -- <file>
# 抛弃工作区修改
$ git co .
# 将工作文件修改提交到本地暂存区
$ git add <file>
# 将所有修改过的工作文件提交暂存区
$ git add .
# 从版本库中删除文件
$ git rm <file>
# 从版本库中删除文件,但不删除文件
$ git rm <file> --cached
# 从暂存区恢复到工作文件
$ git reset <file>
# 从暂存区恢复到工作文件
$ git reset -- .
# 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改
$ git reset --hard
# 将git add, git rm和git ci等操作都合并在一起做
$ git ci <file>
$ git ci .
$ git ci -a
# 修改最后一次提交记录
$ git ci -am "some comments"
$ git ci --amend
# 恢复某次提交的状态,恢复动作本身也创建了一次提交对象
$ git revert <$id>
# 恢复最后一次提交的状态
$ git revert HEAD
- 查看
文件diff
# 比较当前文件和暂存区文件差异
$ git diff <file>
# 比较两次提交之间的差异
$ git diff
$ git diff <$id1> <$id2>
# 在两个分支之间比较
$ git diff <branch1>..<branch2>
# 比较暂存区和版本库差异
$ git diff --staged
# 比较暂存区和版本库差异
$ git diff --cached
# 仅仅比较统计信息
$ git diff --stat
查看提交记录
# 查看该文件每次提交记录
$ git log
$ git log <file>
# 查看每次详细修改内容的diff
$ git log -p <file>
# 查看最近两次详细修改内容的diff
$ git log -p -2
#查看提交统计信息
$ git log --stat
查看
、切换
、创建
和删除分支
# 查看远程分支
$ git br -r
# 创建新的分支
$ git br <new_branch>
# 查看各个分支最后提交信息
$ git br -v
# 查看已经被合并到当前分支的分支
$ git br --merged
# 查看尚未被合并到当前分支的分支
$ git br --no-merged
# 切换到某个分支
$ git co <branch>
# 创建新的分支,并且切换过去
$ git co -b <new_branch>
# 基于branch创建新的new_branch
$ git co -b <new_branch> <branch>
# 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除
$ git co $id
# 把某次历史提交记录checkout出来,创建成一个分支
$ git co $id -b <new_branch>
# 删除某个分支
$ git br -d <branch>
# 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
$ git br -D <branch>
分支合并
和rebase
# 将branch分支合并到当前分支
$ git merge <branch>
# 不要Fast-Foward合并,这样可以生成merge提交
$ git merge origin/master --no-ff
# 将master rebase到branch,下面两个是等价的
$ git rebase master <branch>
$ git co <branch> && git rebase master && git co master && git merge <branch>
Git补丁管理(方便在多台机器上开发同步时用)
# 生成补丁
$ git diff > ../sync.patch
# 打补丁
$ git apply ../sync.patch
#测试补丁能否成功
$ git apply --check ../sync.patch
Git暂存管理
# 暂存
$ git stash
# 列所有stash
$ git stash list
# 恢复暂存的内容
$ git stash apply
# 删除暂存区
$ git stash drop
Git远程分支管理
# 抓取远程仓库所有分支更新并合并到本地
$ git pull
# 抓取远程仓库所有分支更新并合并到本地,不要快进合并
$ git pull --no-ff
# 抓取远程仓库更新
$ git fetch origin
# 将远程主分支合并到本地当前分支
$ git merge origin/master
# 跟踪某个远程分支创建相应的本地分支
$ git co --track origin/branch
# 基于远程分支创建本地分支,功能同上
$ git co -b <local_branch> origin/<remote_branch>
# push所有分支
$ git push
# 将本地主分支推到远程主分支
$ git push origin master
# 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)
$ git push -u origin master
# 创建远程分支, origin是远程仓库名
$ git push origin <local_branch>
# 创建远程分支
$ git push origin <local_branch>:<remote_branch>
#先删除本地分支(git br -d <branch>),然后再push删除远程分支
$ git push origin :<remote_branch>
Git远程仓库管理
# 查看远程服务器地址和仓库名称
$ git remote -v
# 查看远程服务器仓库状态
$ git remote show origin
# 添加远程仓库地址
$ git remote add origin git@ github:robbin/robbin_site.git
# 设置远程仓库地址(用于修改远程仓库地址)
$ git remote set-url origin git@ github.com:robbin/robbin_site.git
# 删除远程仓库
$ git remote rm <repository>
4,小结
本篇文章简单介绍了Git的使用以及常见命令,由于纯手打,难免会有纰漏,如果发现错误的地方,请第一时间告诉我,这将是我进步的一个很重要的环节。