Git简明教程

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

设置全局 Git签名

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来创建远程仓库
创建GitHub远程仓库

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方式, 


4.2 将远程库克隆至本地

4.3 从远程库更新代码

原文地址:https://www.cnblogs.com/bobo132/p/13950356.html