$ mkdir git-tutorial # 新建目录 $ cd git-tutorial # 进入目录 $ git init # 初始化仓库
.git
目录(该目录存储着管理当前目录内容所需的仓库数据);$ git status # 显示 Git 仓库的状态
$ git add README.md # 向暂存区添加文件
$ git commit -m "First commit" # 保存仓库的历史记录
-m
参数后面的字符串称做提交信息,是对这个提交的概述;-m
,直接执行 git commit
命令。$ git log # 查看提交日志 $ git log --pretty=short # 只显示提交信息的第一行 $ git log README.md # 只显示指定目录、文件的日志(README.md) $ git log -p # 显示文件的改动 $ git log -p README.md # 查看README.md 文件的提交日子以及提交先后的差异
$ git diff # 查看工做树和暂存区的差异 $ git diff HEAD # 查看工做树和最新提交的差异
PS:不妨养成这样一个好习惯:在执行git commit
命令以前先执行git diff HEAD
命令,查看本次提交与上次提交之间有什么差异,等确认完毕后再进行提交。这里的HEAD
是指向当前分支中最新一次提交的指针。
master -----> master |---> feature-A |---> fix-B
master
分支是 Git 默认建立的分支,基本上全部开发都是以这个分支为中心进行的;master
分支合并。/---\ fix-B master ---------------> master \--------/ feature-A
$ git branch # 显示分支一览表 * master # master 分支左侧标有 `*`(星号),表示当前所在分支
$ git checkout -b # 建立、切换分支 $ git checkout -b feature-A # 切换到 feature-A 分支并进行提交(下面两条命令等同该条命令) $ git branch feature-A # 建立 feature-A 分支 $ git checkout feature-A # 将当前分支切换为 feature-A 分支 $ git checkout master # 切换到 master 分支 $ git checkout - # 切换回上一分支
特性(Topic)分支
,即集中实现单一特性(主题),除此以外不进行任何做业的分支;master
分支担当;master
分支合并。只要保持这样一个开放流程,就能保证 master
分支能够随时供人查看。这样一来,其余开发者也能够放心大胆地从 master
分支建立新的特性分支;master
分支做为主干分支;下面演示如何将分支 feature-A
合并到 master
:git
首先,切换到 master
分支:github
$ git checkout master Switch to branch 'master'
而后合并 feature-A
分支:编辑器
为了在历史记录中明确下本次分支合并,咱们须要建立合并提交。所以在合并时加上
--no-ff
参数。
$ git merge --no-ff feature-A
随后编辑器会启动,用于录入合并提交的信息。随后,feature-A
分支的内容就合并到 master
分支中了。学习
$ git log --graph # 用图表形式输出提交日志
该命令能够清楚看到特性分支的建立以及合并。
/------> fix-B master ---------------> master \------------/ feature-A
$ git reset --hard fd0cbf0d4a234f67sjdkfjklbj6786a # 回溯历史版本 HEAD is now at fd0cbf0 Add index
git reset --hard
命令,只要提供目标时间点的哈希值,就能够彻底恢复至该时间点的状态;git reflog
命令能够查看当前仓库执行过的操做日志,只要不进行 Git 的 GC
(Garbage Collection,垃圾回收),就能够经过日志随意调取近期的历史状态,就像给时间机器指定一个时间点,在过去将来中自由穿梭通常;git reflog
命令恢复到原先的状态,请务必牢记!(由于 git reflog
命令打印出来的操做前面都有版本哈希码,能够拿来使用)$ git commit -amend # 修改提交信息
$ git rebase -i # 压缩历史
$ git remove add origin git@github.com:github-book/git-tutorial.git # 添加远程仓库
$ git push -u origin master # 推送至 master 分支 $ git checkout -b feature-D # 建立 feature-D 分支 $ git push -u origin feature-D # 推送至 feature-D 分支
-u
能够在推送的同时,将 origin
仓库的 master
分支设置为本地仓库当前分支的 upstream
(上游);git pull
命令从远程仓库获取内容时,本地仓库的这个分支就能够直接从 origin
的 master
分支获取内容,省去了另外添加参数的麻烦。$ git clone git@github.com:github-book/git-tutorial.git # 获取远程仓库 $ git branch -a # 查看当前分支的相关信息
PS:参数
-a
能够同时显示本地仓库和远程仓库的分支信息。
git pull origin feature-D # 获取最新的远程仓库分支