版本管理-Git


一直只会常用的那几个 Git 命令,每次遇到不会的操作都是现去Google,十分不方便,今个得空咋就仔仔细细的学习学习 Git !

Git简介

Git是目前世界上最先进的分布式版本控制系统。

工作流程

工作流程

  • 工作区:你在电脑里能看到的目录。

  • 暂存区:准备进行版本保存的文件列表。

  • 本地仓库:完成版本保存的文件列表。

  • 远程仓库:例如:自己的GitHub仓库、码云仓库。

  • 提交流程为:工作区➤暂存区➤本地仓库➤远程仓库

专有名词

  • master:默认开发分支(最新版本的名字)
  • origin:给远程仓库地址起别名的常用名字(http方式)
  • origin_ssh:给远程仓库地址起别名的常用名字(ssh免密方式)
  • HEAD:当前所在的版本(在分支操作时,也叫没有命名的分支)
  • HEAD^ :上一个版本
  • HEAD^^ :上上个版本
  • HEAD~n:前n个版本

配置用户信息

全局配置

git config --global user.name "Your Name"
git config --global user.email "email@example.com"

单独配置

#对某个项目想单独配置信息可以使用
git config user.name "Your Name" 
git config user.email "email@example.com"

查看配置

git config --global user.name #查看配置的全局名字
git config --global user.email #查看配置的全局邮箱地址
git config --list #查看当前项目的git配置信息(会先列出全局配置,最下面列出的是当前项目的配置)整页翻页 ctrl-f(往前翻) ctrl-b(往后翻)

仓库的创建与提交

创建仓库

git init

提交文件

#第一步:把文件添加到暂存区
git add <file> #添加单个文件
git add .      #添加所有文件

#第二步,把暂存区文件提交到本地仓库
git commit -m <message>

例子:新建learngit文件夹,并将该文件夹初始化为Git仓库,再向仓库中添加一个test.txt文件

mkdir learngit
cd learngit
git init

vim test.txt
git add test.txt
git commit -m "add a test file"

版本回退(回到过去)

软回退

将当前分⽀回滚到指定版本,保持⼯作区和暂存区状态不变。

git reset --soft HEAD^  #回退到上一个版本

git reset --soft HEAD~n #回退到前n个版本

git reset --soft <commit id> #回退到指定版本,id可通过git log查看

混合回退

将当前分⽀回滚到指定版本,清除暂存区的修改,但保持⼯作区状态不变。

git reset HEAD^  #回退到上一个版本

git reset HEAD~n #回退到前n个版本

git reset  <commit id> #回退到指定版本,id可通过git log查看

强制回退

将当前分⽀回滚到指定版本,清除暂存区的修改,并强制删除所有⼯作区的修改

git reset --hard HEAD^  #回退到上一个版本

git reset --hard HEAD~n #回退到前n个版本

git reset --hard <commit id> #回退到指定版本,id可通过git log查看

回退取消(重返未来)

现在,你回退到了某个版本,关掉了电脑(无法使用git log 查看到回退前的commit id),第二天早上就后悔了,想恢复到回退前的版本怎么办?但是找不到回退前版本的commit id怎么办?

git reflog #查看所有的历史命令,获取你想要回到的版本id,

git reset --hard <commit id> #回退到该版本

分支管理(平行宇宙)

分支简介

Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点

初始分支

Git新建一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev

新建分支

对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变

新分支开发

假如我们在dev上的工作完成了,就可以把dev合并到master上。就是直接把master指向dev的当前提交,就完成了合并

合并分支

合并完分支后,甚至可以删除dev分支。删除dev分支就是把dev指针给删掉,删掉后,我们就剩下了一条master分支

删除分支

创建分支

git branch [branch_name]

切换分支

git checkout [branch_name]

git switch [branch_name]

创建并切换

git checkout -b [branch_name]

git switch -c [branch_name]

合并分支

git merge [branch_name] #用于合并指定分支到当前分支

删除分支

git branch -d [branch_name]

查看分支

git branch -vv #查看当前开发分支(当前分支前面会标一个*号)
git branch #查看本地所有分支
git branch -r #查看远程所有分支
git branch -a #查看本地和远程所有分支

查看提交历史

git log  #查看历史提交记录
git log --pretty=oneline #查看简洁版历史提交记录
git log --graph #查看历史提交记录拓扑图
git log -p <file> #指定文件的历史提交记录
git blame <file> #查看指定文件的历史修改记录

更多 git log 命令可查看:http://git-scm.com/docs/git-log

一些常用命令

git status  #查看项目文件此时的状态(在工作区、缓存区还是在仓库中)

git reflog #查看所有的历史命令

git remote -v #查看远程仓库地址

git diff #⽐较⼯作区和暂存区的修改

git diff HEAD #⽐较⼯作区和上⼀次commit后的修改。 

git diff --cached #⽐较暂存区和上⼀次commit后的修改。

SourceTree

一款用于Windows和Mac的免费Git可视化管理工具。

详细用法可参考:

git的GUI工具Sourcetree使用及命令行对比

Git/SourceTree版本管理_bilibili

Reference

Sponsor❤️

您的支持是我不断前进的动力,如果你觉得本文对你有帮助,你可以请我喝一杯冰可乐!嘻嘻🤭

支付宝支付 微信支付

文章作者: 简简
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 简简 !
评论-----昵称和邮箱必填,网址选填
 上一篇
Java之JDBC Java之JDBC
JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API。
2022-01-06
下一篇 
研一上总结 研一上总结
碎碎念现在是 2021年12月03日08点43分,此时我正在成都开往XX的火车上,因为多臭美了 10 分钟,加之去往地铁站的路上有一点点堵车,我差点没有赶上火车,幸运的是我在停止检票的前一分钟顺利冲进了站点,此刻望着窗外转瞬即逝的风景,顿时
2021-12-03