git - 零基础也能看懂的上手操作指南

一、简介

作为coder,git 一定是大家耳熟能详的
git 是目前世界上最先进的分布式版本控制系统,用于开发过程中的备份、恢复、修改、查看历史等

二、安装

// 下载地址
http://git-scm.com/download/win

因为是外网,没有梯子的情况下可能比较慢。
下载完成后打开,傻瓜式安装。安装完成后在桌面右键,会看到以下两个命令
在这里插入图片描述
Git GUI Here 表示图形化界面,一般不使用,作为coder,我们主要使用 Git Bash Here 命令行界面。
点击 Git Bash Here 打开命令行窗口,输入以下命令查看版本

// 查看 git 版本信息
git --version

在这里插入图片描述
已经成功显示出版本信息,说明我们安装成功了

三、配置

仍在命令行界面,输入以下命令配置用户名称和邮箱

// 配置用户名称
git config --global user.name "bzy"
// 配置邮箱
git config --global user.email [email protected]

配置完成后,为了检查我们设置的信息是否正确,继续输入以下命令

// 查看配置信息
git config --list

在这里插入图片描述
上面的配置信息不用理会,可以在底下看到我们刚才配置的用户名称和邮箱信息

四、基础知识

完成以上简单配置后,就可以开始正式学习 git 相关的基础知识了

1.区域(工作区、暂存区和版本库)

简单来说,我们平常写代码时所在的文件夹就是一个工作区,这里面的区域 git 不会管理,也就是说,无论我们在工作区内如何修改代码,也不会对项目造成任何的影响。通常来说,我们不会加一行代码或者改一个代码文件就完成一次项目的版本迭代,一般会同时修改好几个甚至更多的文件才能完成一次版本的更新,此时就需要一个暂存区将我们修改后但还没有提交的代码文件进行暂时存储,等到所有的代码文件都修改完成后,一次性将本次修改的所有代码文件提交至版本库,完成本次的版本更新与迭代。

2.对象(数据对象、树对象和提交对象)

首先,git 完成一次完整的流程至少要包括一个数据对象(git)、一个树对象(tree)和一个提交对象(commit)

1)数据对象(git对象):

git 的核心部分是一个由 key : val 组成的一个简单的键值对数据库,其中 key 是 val 对应的hash,所在我们在向该数据库插入任意类型的内容时,它会返回一个键值key,通过该键值可以在任意时刻再次检索该内容,键值对在git内部是一个blob类型。一般来说,一个版本会包含很多个改动,而一个 git 对象只能对应一次改动,同时 git 并没有保存文件名,只是保存文件内容,因此我们引出了树对象。

2)树对象(tree对象)

一个blob对象只能保存某个文件的内容以及它的唯一键值,并不会保存文件名,所以树对象主要是用于解决这个问题。树对象不仅可以保存文件名,还可以保存多个文件的内容及其唯一键,而且还允许包含另外一个树对象(subtree,也就是套娃)。如果把 blob 对象比作是一个文件,那么一个 tree 对象就是一个目录。

3)提交对象(commit对象)

利用 tree 对象,我们为本地 git 库保存了一份本次要提交的全部更改,但必须要记住这些更改的唯一键,才能利用键值得到对应的更改,同时还不知道是谁,在什么时候进行了这些更改,以及为什么要进行这些更改,而 commit 对象就是用于解决这些问题的。一个 commit 对象会包含我们要提交的 tree 对象的唯一键,作者和提交者的个人信息,以及提交时的备注信息,以便于需要时查看。

五、git 常用命令

1.初始化仓库

// 初始化仓库
git init

注:初始化仓库后会在本地生成一个.git 文件夹,在 windows 系统中默认是隐藏文件,设置显示隐藏文件后就能看到。

2.增加 / 删除文件

// 添加
// 将指定文件添加至暂存区
git add [file1] [file2] ...
// 将指定目录添加至暂存区
git add [dir]
// 将当前目录下的所有文件添加至暂存区
git add .

注:git add 的实际流程是 工作区文件 - > 在版本库中生成 git 对象 - > 推送到暂存区 ,并不是将工作区的文件直接添加至暂存区

// 删除
// 删除工作区文件,将本次删除放入暂存区
git rm [file1] [file2]
// 改名文件,将本次改名放入暂存区
git mv [file-original] [file-renamed]
// 将暂存区提交至仓库区
git commit -m [message]
// 将暂存区中的指定文件提交至仓库区
git commit [file1] [file2] ... -m [message]
// 将上次提交后的所有变化直接提交至仓库区
git commit -a
// 提交时显示所有的 diff 信息
git commit -v
// 使用一次新的 commit 来替代上一次的提交
git commit --amend -m [message]
// 重做上一次 commit,并包括指定文件的新变化
git commit --amend [file1] [file2]
// 将提交更改至远程仓库
git push origin master
// 拉取远程更改到本地仓库(默认自动合并)
git pull origin master

3.查看信息

在更改和提交前,我们可以查看当前 git 的状态,提交日志以及文件差异等内容

// 查看所有变更的文件
git status
// 查看当前分支的版本历史
git log
// 查看 commit 历史以及每次 commit 发生变更的文件
git log --stat
// 根据关键词搜索提交历史
git log -S [keyword]
// 查看某个 commit 之后的所有变动(每个 commit 占据一行)
git log [tag] HEAD --pretty=format:%s
// 查看某个文件的版本历史,包括文件改名
git log --follow [file]
git whatchanged [file]
// 查看指定文件相关的每一次 diff
git log -p [file]
// 查看过去5次提交
git log -5 --pretty --oneline
// 查看所有提交过的用户,按提交次数排序
git shortlog -sn
// 查看指定文件的修改记录,包括修改人和修改时间
git blame [file]
// 查看暂存区和工作区的差异
git diff
// 查看暂存区和上一个 commit 差异
gti diff --cashed [file]
// 查看工作区和当前分支最新 commit 之间的差异
git diff HEAD
// 查看两次提交之间的差异
git diff [first-branch] [second-branch]
// 查看某次提交的元数据的内容变化
git show [commit]
// 查看某次提交发生变化的文件
git show --name-only [commit]
// 查看某次提交时某个文件的内容
git show [commit]:[filename]
// 查看当前分支下的最近几次提交
git reflog

4.标签(版本)

标签也可以看作是版本,我们经常会在 github 中看到许多 tag,其实就是在某个时刻为此时的版本库打上一个 tag 标签,用于唯一确定当前时刻的版本。

// 查看所有 tag
git tag
// 在当前 commit 下新建一个 tag
git tag [tag]
// 在指定 commit 下新建一个 tag
git tag [tag] [commit]
// 删除本地 tag
git tag -d [tag]
// 删除远程 tag
git tag origin :refs/tags/[tagname]
// 查看 tag 信息
git show [tag]
// 提交指定 tag
git push [remote] [tag]
// 提交所有 tag
git push [remote] --tags
// 新建一个分支,指向某个 tag
git checkout -b [branch] [tag]

5.分支管理

在协同开发时,我们可以创建多个分支,这样不同的开发人员可以在不同的分支上干各自的事情

// 查看所有本地分支
git branch
// 查看所有远程分支
git branch -r
// 查看所有本地分支和远程分支
git branch -a
// 新建一个分支,但仍然保持在当前分支
git branch [branch-name]
// 新建一个分支,并切换至该分支
git checkout -b [branch]
// 新建一个分支,指向指定的 commit
git branch [branch] [commit]
// 切换至指定分支,并更新工作区
git checkout [branch-name]
// 切换到上一个分支
git checkout -
// 合并指定分支到当前分支
git merge [branch]
// 选择一个 commit 并合并进当前分支
git cherry-pick [commit]
// 删除分支
git branch -d [branch-name]
// 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

6.撤销

在实际工作中,如果出现不小心提交错误或者我们想回到之前的某个版本的情况,是有后悔药可以吃的,即撤销命令

// 撤回在工作目录的修改
git checkout -- filename

// 撤回在暂存区的修改
git reset HEAD filename

// 撤回提交至版本库的注释 
git commit --amend 
// 恢复暂存区的指定文件到工作区
git checkout [file]
// 恢复某个 commit 的指定文件到暂存区和工作区
git checkout [commit] [file]
// 恢复暂存区的所有文件到工作区
git checkout .
// 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变
git reset [file]
// 重置暂存区与工作区,使之与上一次 commit 保持一致
git reset --hard
// 重置当前分支的指针为指定 commit,同时重置暂存区,但工作区不变
git reset [commit]
// 重置当前分支的 HEAD 为指定 commit,同时重置暂存区和工作区,与指定commit一致
git reset --hard [commit]
// 重置当前 HEAD 为指定 commit ,但保持暂存区和工作区不变
git reset --keep [commit]
// 新建一个 commit,用来撤销指定 commit,后者的所有变化都将被前者抵消,并且应用到当前分支
git revert [commit]
// 暂时将未提交的变化移除,稍后再移入
git stash
git stash pop

六、总结

上述只是列举了一些比较常用的 git 命令,实际上还有许多命令没有列举出来,这就需要我们在实际使用中勤动手去查需要的 git 命令。
git 命令太多记不住怎么办?其实 git 只是我们在工作中会用到的一个工具罢了,实在记不住就在需要的时候会查并且知道怎么用就够了,当然,查多了用多了自然而然也就记住了。
无他,唯手熟尔。

猜你喜欢

转载自blog.csdn.net/solitary__/article/details/112920313