【1】版本控制工具应该具备的功能

① 协同修改

多人并行不悖的修改服务器端的同一个文件。

② 数据备份

不仅保存目录和文件的当前状态,还能够保存每一个提交过的历史状态。

③ 版本管理

在保存每一个版本的文件信息的时候要做到不保存重复数据,以节约存储空
间,提高运行效率。这方面SVN 采用的是增量式管理的方式,而Git 采取了文
件系统快照的方式。

④ 权限控制

对团队中参与开发的人员进行权限控制。
对团队外开发者贡献的代码进行审核——Git 独有。

⑤ 历史记录

查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。

⑥ 分支管理

允许开发团队在工作过程中多条生产线同时推进任务,进一步提高效率。

⑦ 版本控制工具

集中式版本控制工具:CVS、SVN、VSS……

Git基础入门与常用操作_本地库


分布式版本控制工具:Git、Mercurial、Bazaar、Darcs……

Git基础入门与常用操作_Git_02


【2】Git 介绍与安装

① 官网地址:https://git-scm.com/。

Git基础入门与常用操作_本地库_03


② Git的优势

  • 大部分操作在本地完成,不需要联网;
  • 完整性保证;
  • 尽可能添加数据而不是删除或修改数据;
  • 分支操作非常快捷流畅;
  • 与Linux 命令全面兼容。

③ Git的安装

  • 从官网下载对应自己系统的安装程序,以管理员身份运行,安装在英文无空格目录下;

Git基础入门与常用操作_本地库_04


  • next 下一步 安装选项

Git基础入门与常用操作_常用命令_05


  • next Git安装目录的名字–默认即可

Git基础入门与常用操作_本地库_06


  • next 使用VIM编辑器作为默认编辑器–不需要更改

Git基础入门与常用操作_常用命令_07


  • next 选择如何使用Git 命令行

Git基础入门与常用操作_git_08

完全不修改Path环境变量,仅在Git bash中使用Git。


  • next 选择Git使用的命令客户端程序–默认即可

Git基础入门与常用操作_版本控制_09


  • next 选择Git本地到远程连接所使用的SSL/TLS库–默认即可

Git基础入门与常用操作_Git_10


  • next 配置文档行末换行符转换风格–默认即可

Git基础入门与常用操作_本地库_11


  • next 选择Git Bash使用的终端仿真程序–默认即可

Git基础入门与常用操作_Git_12


  • next 配置额外功能 --默认即可

Git基础入门与常用操作_Git_13


  • install --安装过程

Git基础入门与常用操作_Git_14
Git基础入门与常用操作_Git_15


右键–Git Bash Here,即可打开Git的命令终端:

Git基础入门与常用操作_本地库_16


【3】本地库和远程库

① Git的结构

Git基础入门与常用操作_本地库_17


② Git和代码托管中心

代码托管中心的任务:维护远程库。

局域网环境下:GitLab 服务器。

外网环境下:GitHub、码云。


③ 团队内部协作下本地库和远程库示意图

Git基础入门与常用操作_版本控制_18


④ 跨团队协作下本地库和远程库示意图

Git基础入门与常用操作_版本控制_19


【4】Git仓库初始化并设置签名

① 本地库初始化

在磁盘Git工作空间内创建firstDemo,然后执行命令git init.

12746@Janus MINGW64 ~/Desktop
$ cd D:/GitInstall/workspace

12746@Janus MINGW64 /d/GitInstall/workspace
$ mkdir firstDemo

12746@Janus MINGW64 /d/GitInstall/workspace
$ ls
firstDemo/

12746@Janus MINGW64 /d/GitInstall/workspace
$ cd firstDemo/

12746@Janus MINGW64 /d/GitInstall/workspace/firstDemo
$ ls

12746@Janus MINGW64 /d/GitInstall/workspace/firstDemo
$ git init

Git基础入门与常用操作_常用命令_20

如图初始化了空的Git仓库在D:/GitInstall/workspace/firstDemo/.git/路径下。


创建的.git目录是隐藏资源,使用如下命令查看:

12746@Janus MINGW64 /d/GitInstall/workspace/firstDemo (master)
$ ll -lA
total 4
drwxr-xr-x 1 12746 197121 0 7月 29 15:50 .git/

查看git目录,内容如下:

Git基础入门与常用操作_常用命令_21

注意:​​.git​​ 目录中存放的是本地库相关的子目录和文件,不要删除,也不要胡乱修改。


② 设置签名

形式:用户名:tom;Email 地址:goodMorning@atguigu.com。

作用:区分不同开发人员的身份。

辨析:这里设置的签名和登录远程库(代码托管中心)的账号、密码没有任何关
系。

命令

项目级别/仓库级别:仅在当前本地库范围有效

git config user.name tom_pro
git config user.email goodMorning_pro@qq.com
# 信息保存位置:./.git/config 文件

Git基础入门与常用操作_常用命令_22

系统用户级别:登录当前操作系统的用户范围

git config --global user.name tom_glb
git config --global user.email goodMorning_pro@qq.com
# 信息保存位置:~/.gitconfig 文件

Git基础入门与常用操作_常用命令_23

  • 级别优先级

就近原则:项目级别优先于系统用户级别,二者都有时采用项目级别的签名。如果只有系统用户级别的签名,就以系统用户级别的签名为准。二者都没有不允许


【5】常用命令操作

如果某个命令不知道或者想要更多功能,试试如下命令:

git --help;
git help <command>;
git help -a;
git help -g;

① 状态查看

git status

查看工作区、暂存区状态。
Git基础入门与常用操作_版本控制_24


② git add添加

git add [file name]

将工作区的“新建/修改”添加到暂存区,如下图创建一个good.txt并提交:

Git基础入门与常用操作_本地库_25


③ 提交文件

git commit  -m "commit message"  [file name]
# git rm --cached <file> 从暂存区移除指定文件
# git commit -a //提交所有文件

将暂存区的内容提交到本地库。

Git基础入门与常用操作_常用命令_26


提交多个文件:

git commit -m "commit message" *

Git基础入门与常用操作_git_27


④ 文件覆盖与更新

如将good.txt进行了修改,查看状态:

Git基础入门与常用操作_git_28

此时直接添加将会将修改后的文件放到暂存区,如下图:

Git基础入门与常用操作_版本控制_29


⑤ 查看历史记录

查看日志

git log

Git基础入门与常用操作_常用命令_30

多屏显示控制方式:

空格向下翻页
b 向上翻页
q 退出

Git基础入门与常用操作_Git_31


日志单行显示:

git log --pretty=oneline

Git基础入门与常用操作_git_32

git log --oneline

Git基础入门与常用操作_本地库_33

显示指针:

git reflog

Git基础入门与常用操作_Git_34

HEAD@{移动到当前版本需要多少步}。

查看提交详情

git log --stat

Git基础入门与常用操作_git_35
查看最新的commit

git show

查看指定commit hashID的所有修改

git show commitId

查看某次commit中具体某个文件的修改

git show commitId fileName

⑥ 前进/后退当前所在版本

基于索引值操作[推荐]

git reset --hard [局部索引值]
# git reset --hard a6ace91

Git基础入门与常用操作_版本控制_36

使用^符号:只能后退

git reset --hard HEAD^
# 注:一个^表示后退一步,n 个表示后退n 步

Git基础入门与常用操作_Git_37

  • 使用~符号:只能后退
git reset --hard HEAD~n
# 注:表示后退n 步

⑦ reset 命令的三个参数对比

  • –soft 参数

仅仅在本地库移动HEAD 指针。

  • –mixed 参数
    在本地库移动HEAD 指针并重置暂存区。
  • –hard 参数

在本地库移动HEAD 指针;重置暂存区;重置工作区。


⑧ 删除文件并找回

前提:删除前,文件存在时的状态提交到了本地库,如下图所示:

Git基础入门与常用操作_Git_38
Git基础入门与常用操作_本地库_39


操作:git reset --hard [指针位置]

删除操作已经提交到本地库:指针位置指向历史记录,如下图:

Git基础入门与常用操作_常用命令_40

删除操作尚未提交到本地库:指针位置使用HEAD。

如下图所示,此时删除操作还没有提交到本地库,只是到暂存区。

Git基础入门与常用操作_本地库_41

使用命令:

git reset --hard HEAD

Git基础入门与常用操作_常用命令_42


⑨ diff比较文件差异

将工作区中的文件和暂存区进行比较:

git diff [文件名]

Git基础入门与常用操作_版本控制_43

将工作区中的文件和本地库历史记录比较:

git diff [本地库中历史版本] [文件名]
# git diff HEAD apple.txt
# git diff HEAD^ apple.txt

Git基础入门与常用操作_版本控制_44

不带文件名比较多个文件:

git diff

Git基础入门与常用操作_版本控制_45


⑩ 拉取远程代码并且覆盖本地更改

git fetch origin && git reset –hard origin/master

(11)列出远程和本地所有分支

git branch -a
git branch -r

(12)强制更新远程分支

git push origin master -f

(13)回滚一个 merge

git revert -m 1 xxxx

(14) 修改之前的提交记录或者很久前提交的记录

git rebase –interactive ID^

将需要修改的记录的 pick 改成 edit
执行更改

git commit –all –amend
git rebase –continue

(15)使用多个远程代码库,并且使用多个不同的 SSH Key

修改 ​​~/.ssh/config​

Host bitbucket.org
HostName bitbucket.org
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa
User git

Host bitbucket.org-key2
HostName bitbucket.org
IdentityFile ~/.ssh/key2_id_rsa
User git

修改 ​​.git/config​

[remote “origin”]
url = git@bitbucket.org-key2:XXXX/yyyy.git
fetch = +refs/heads/*:refs/remotes/origin/*

(16)和外部团队协作需要的维护多个远程库,合并其他库的更新的过程

git remote rename origin upstream
git remote add origin URL_TO_GITHUB_REPO
git push origin master
git pull upstream master && git push origin master

(17)撤销 Git 的最后一次提交

git reset –soft HEAD~1