1 本地Git操作
1.1 本地库的初始化
# 选择一个目录作为本地库, 进入该目录
cd <目录>
# 初始化本地库 (必须先初始化本地库, 才能进行 git相关操作)
git init
1.2 设置签名信息
签名的作用是为了区分不同的开发人员
签名有项目范围和全局范围之分
项目签名的优先级高于全局签名
注意: 这里的用户签名和 GItHub账号没有任何关系
1.2.1 全局签名
# 设置全局签名
git config --global user.name xxx
git config --global user.email xxx@yyy.com
# 查看全局 Git签名 (全局的配置文件是 ~/.gitconfig)
cat /<用户家目录>/.gitconfig
1.2.2 项目级别签名
# 项目签名的设置 (与全局签名相比, 仅仅是少了个 --global参数)
# 项目级别的文件签名需要先使用 git init初始化本地库
git config user.name dom4j
git config user.email w15635606382@gmail.com
# 查看项目签名
cat <项目目录>/.git/config
2 本地库操作
2.1 基本操作
git add
& git commit
& git status
# 查看 git仓库状态
git status
# 提交文件至暂存区 (工作区 -> 暂存区)
# add操作是告诉 git来追踪这个文件的变化
git add <文件名>
# 将暂存区的文件提交到本地库
git commit <文件名> -m '备注信息'
2.2 从暂存区中撤销或恢复
# 已经提交到暂存区, 但没有提交到本地库的文件
# 将某个文件从暂存区中删除 (恢复到 git add之前的状态)
git rm --cache <文件名>
# 某个文件已提交到暂存区, 但是在工作区中不小心删掉了, 可以用如下命令恢复
# 如果工作区的修改不想要了, 也是使用该命令使工作区恢复到和暂存区一样的内容
# 总结: 使工作区恢复到和暂存区一致的状态, 不论工作区的该文件发生了修改还是删除
git checkout -- <文件名>
2.3 从本地库中撤销或恢复
# 文件已提交到本地库 (commit指令)
# 工作区文件不小心删除了, 或者工作区发生的改动不想要了, 可以从本地库中恢复
git checkout -- <文件名>
# 如果该文件确实想删除, 可以通过如下命令删除该文件, 并提交到本地库
git rm <文件名>
git commit -m '备注信息'
# 注: 暂存区的文件可以删除, 以提交到本地库的文件无法删除, 本地版本库会保留提交记录
# 可以使用git log查看提交记录
2.4 查看本地库提交记录
使用 git log命令来查看本地库相关提交记录
# 查看所有提交过的版本信息
git log
# 查看提交记录, 简洁显示 (commit id [版本号, 用 sha1字符串表示] + 提交说明)
# commit id是向前或向后回溯版本的必备参数
git log --pretty=oneline
# 简洁显示提交记录 (部分哈希值 + 提交说明), 只显示当前版本之前的记录
git log --oneline
# 简洁显示(部分哈希值 + 指针移动数目 + 提交说明)
git reflog
2.5 版本前进及后退
使用 reset
指令来进行版本回退, 只有已提交的版本才能进行回退
Git针对每次提交都会生成一个唯一的哈希值, 使用索引(即哈希值)来确定要回退的版本
HEAD
值
HEAD
表示提交的最新版本, HEAD^
表示上一个版本, HEAD^^
表示上上个版本, HEAD~100
表示往上100个版本
# 查看版本库提交记录, 确定想要会退的版本
git log --pretty=oneline
# 基于索引: 前进后退都可以
git reset --hard <hash>
# ^符号: 只能后退
git reset --hard HEAD^^^
# ~符号: 只能后退
git reset --hard HEAD~5
# reset的三个参数
# --hard: 仅在本地库移动 HEAD指针
# --soft: 仅在本地库移动 HEAD指针, 重置暂存区
# --mixed: 仅在本地库移动 HEAD指针, 重置暂存区和工作区
-- hard
& --soft
& --mixed
mixed
此为默认方式, 不带任何参数的 git reset
即这种方式. 他会退到某个版本, 只保留源码, 回退 commit 和 index信息
soft
回退到某个版本, 只回退了 commit的信息, 不会恢复到 index file 一级, 如果要提交, 直接 commit即可
hard
彻底回退到某个版本, 本地的源码也会变为上一版本的内容, 此命令慎用!
Git的版本回退速度很快, 本质上是因为 Git内部有 HEAD指针, 当回退版本的时候, 只是单纯的移动指针, 所以速度很快, 使用 git reflog 可以在各个版本之间自由移动
2.6 比较文件差异
# 工作区文件和暂存区比较
git diff <文件名>
# 工作区文件和本地库比较
git diff HEAD <文件名>
# 工作区文件和本地库任意版本比较
git diff HEAD~n <文件名>
3 分支管理
3.1
# 查看分支
git branch
# 新建分支
git branch <分支名>
# 切换分支
git checkout <分支名>
4 远程库操作
4.1 在 GitHUb上新建远程仓库
注册GitHub账号, 登录后, 点击头像左边的加号, 选择 new repository来创建远程仓库
4.2 管理远程主机
为了便于管理, Git要求每个远程主机都必须指定一个主机名, git remote
命令就用于管理主机名
git remote add
添加与本项目相关的远程仓库
主机名是为远程仓库起的别名, 一般一个本地库只会关联一个远程仓库, 使用 origin作为主机名
远程仓库的地址可以使用 Git方式的和 HTTPS方式的, 在GitHUb对应仓库中复制即可
# 添加远程主机
git remote add <主机名> <远程仓库的地址>
# 删除远程主机
git remote rm <主机名>
# 修改远程库别名
git remote rname <原主机名> <新主机名>
4.1 推送到远程库
在推送之前, 确保在 GitHub创建了远程仓库并且在创建了远程仓库的别名 (git remote add xxx url)
git push
作用:使用本地分支来更新远程分支
指令: git push <远程主机名> <本地分支名>:<远程分支名>
注意:
1) 命令中的本地分支是指将要被推送到远端的分支, 而远程分支是指推送的目标分支, 即将本地分支合并到远程分支.
2) 如果省略远程分支名, 即表示将本地分支推送至与之存在”追踪关系”的远程分支(通常两者同名), 如果远程分支不存在,
则会被新建.
# 将本地的 master分支推送至远程 origin主机的 master分支, 如果后者不存在, 则会被新建
# 如果省略本地分支名, 则表示删除指定的远程分支, 因为这等同于推送一个空的本地分支到远程分支
git push origin master
# 下面这两条指令都表示删除远程 master分支
git push origin :master
git push origin --delete master
# 如果当前分支和远程分支之间存在"追踪关系"(即分支名相同), 则本地分支和远程分支都可以省略
# 下面这条指令表示将当前分支推送到 origin主机的对应分支
git push origin
# 如果当前分支只有一个追踪分支, 那么主机名都可省略
git push
# 如果当前分支和多个主机存在追踪关系, 则可以使用 -u选项指定一个默认主机, 这样后面就可以不加任何参数使用 git push了
# 下面命令表示将本地的 master分支推送到 origin主机, 同时指定 origin为默认主机
git push -u origin master
# 不带任何参数的 git push, 默认只推送当前但该案分支, 这叫做 simple方式.
# 此外还有一种 matching方式,