【Git】一文带你搞定Git常用命令及实际应用

文章目录


在这里插入图片描述

一、前言

Git 是一个分布式版本控制系统,由 Linus Torvalds 于 2005 年创建,主要用于跟踪计算机文件的更改。它被广泛应用于软件开发领域,被用于敏捷高效地处理任何或小或大的项目,帮助开发团队协作管理项目代码。当然,常用的版本控制工具不只有它,还有 SVN,CVS等,但由于Git的优越的特点,它渐渐的受到了越来越多的人的青睐,正在逐步取代svn的地位。因此,为了学好这一版本控制工具,本文将按照Git的安装、Git的常用命令到Git在生产中引申出来的实际应用顺序带着大家把Git打通关。


二、Git的安装

下面是Git下载地址:
地址1:https://git-scm.com/downloads
地址2:https://download.tortoisegit.org/tgit/
地址3:https://registry.npmmirror.com/binary.html?path=git-for-windows/

按默认选项安装即可。安装完成后,在开始菜单里找到“Git”->“Git Bash”,出现命令行窗口的,就说明Git安装成功!


三、Git的基本介绍

3.1 原理解析

Git本地有三个工作区,再加上远程的git仓库共四个工作区:

① 工作目录(Working Directory)
工作区,就是你平时存放项目代码的地方

② 暂存区(Stage/Index)
暂存区,用于临时存放你的改动

③ 资源库(Repository)
仓库区,就是安全存放数据的位置

④ git仓库(Remote Directory)
远程仓库,托管代码的服务器

在这里插入图片描述
工作流程

① 在工作目录中添加或修改文件
② 将需要进行版本管理的文件放入暂存区
③ 将暂存区的文件提交到仓库

3.2 分支管理

3.2.1 分支概念

在版本回退里,每次提交,git都把它们串成一条时间线,这条时间线可以理解为是一个分支。默认git创建仓库以后,只有一个分支,叫做主分支master。分支的命名和设计,完全可以由团队创作者自己来管理。HEAD指针,严格来说不是指向提交,而是指向master,master才是指向提交的。而HEAD指向的分支就是当前分支。

在这里插入图片描述

3.2.2 分支管理策略

feature分支:用来做分模块功能开发,建议命名为feature-xxx,模块完成之后,会合并到 dev 分支;
master分支:用于版本的更新,当比较大的功能开发完成或者更新之后会有一次集体的发版,就会将所有的代码都合到master(有的公司也会用release分支发版,原理都是一样);
dev分支:一般是开发测试分支,在项目发版上线之前都会现在dev分支上统一进行测试,确保功能达标没有bug之后再推到master分支;
hotfix分支:一般是用来做线上的紧急 bug 修复的分支,建议命名为 hotfix-xxx。

在这里插入图片描述

3.3 Git的常用命令

3.3.1 配置git环境:git config --global

🌱命令:git config --global user.name "你的用户名"
🌱命令:git config --global user.email "你的邮箱"
说明:
user代表用户,.name代表配置用户的名称,.email代表l代表配置用户的邮箱

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,
如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码

3.3.2 拉取项目代码到本地:git clone

🌱命令:git clone <https地址>
说明:拉取远程仓库项目代码到本地

🌱命令:git clone -b <分支名>  <https地址>
说明:拉取远程仓库项目的指定分支代码到本地

3.3.3 提交及修改提交的信息:git commit

🌱命令:git commit -m <Messgae> 
说明:使用git commit时我们只需要简单描述一下我们做了什么,不要像写注释那样写一大堆,不然将来在回滚代码或者查看历史版本时,很难审阅,
我们需要使用-m命令来简写描述我们的信息。
git commit 会为我们生成40位的哈希值,用于作为id,并把刚刚用git add添加到提交缓存区里的文件提交到本地仓库中,便于我们回滚,至此,这个文件就已经添加到本地仓库中了,同时本地仓库也迭代了一个版本。
例如:git commit -m "add ut"

🌱命令:git commit --amend -m <Messgae> 
说明:我们提交了仓库,但是发现注释写错了,我们可以使用 --amend长命令选项来改写提交用上述重写上一次的提交信息。

3.3.4 查看历史提交日志:git log

🌱命令:git log
说明:正如刚刚改写提交的,想要确定是否改写成功,我们可以使用git log查看一下

3.3.5 查看提交之后文件是否做了改动:git status

🌱命令:git status
说明:如果想要查看哪些文件已更改、添加或删除,以及是否有未提交的更改,可以用git status命令,git status命令用于显示工作目录和暂存区的状态。

3.3.6 将改动文件添加到缓存区:git add

🌱命令:git add Person.class 
说明:添加指定文件到缓存冲区

🌱命令:git add --all
说明:这个命令会将当前目录下包括子目录下所有改动的文件提交到暂存区,注意只包括改动的文件,不改动的不会放到缓存区。

3.3.7 将当前未提交的修改(即工作区和暂存区的修改)先暂时储藏起来:git stash

🌱命令:git stash
说明:如果在指定分支上开发了一部分代码,而此时来了更紧急的需求,那么需要切换到另一个分支去修改代码,如果想不把没有开发完成的代码带过去,那就可以用到git stash命令将没有开发完全的代码暂时存放到一个临时区域,等紧急需求开发完成后再切回到这个分支开发未完成的代码。

🌱命令:git stash -m <备注信息>
说明:相比git stash命令只是多了备注信息

🌱命令:git stash list
说明:可以查看当前保存的所有stash记录

3.3.8 创建git分支:git branch、git checkout

🌱命令:git checkout -b 分支名
说明:使用git checkout -b 分支名 可以创建指定分支,创建完成分支后会自动切换到分支

🌱命令:git branch 分支名
说明:使用git branch 分支名 可以创建指定分支,但不会自动切换到分支上

git checkout -b 分支名
等价于
git branch 分支名  
git checkout 分支名

3.3.9 切换git分支:git checkout、git switch

🌱命令:git checkout 分支名
说明:当我们想切换分支可以使用git checkout来切换

// 新版本
🌱命令:git switch 分支名
说明:新版本中,我们可以用git switch来切换分支

3.3.10 查看git分支:git branch -a

🌱命令:git branch
说明:使用git branch可以显示本地所有分支,并且当前属于哪个分支,也就是查看HEAD的指向

🌱命令:git branch -a
说明:使用git branch -a可以显示远程及本地的所有分支,并且当前属于哪个分支

3.3.11 删除git本地分支:git branch -D

🌱命令:git branch -D 分支名
说明:使用git branch -D 分支名可以删除指定分支

3.3.12 git将指定分支代码合并到当前分支:git merge

🌱命令:git merge <分支名>
说明:如果需要将指定分支代码合并到当前分支,则可以使用git merge <分支名>

3.3.13 远程仓库的最新内容拉到本地,先检查再合并:git fetch

🌱命令:git fetch origin
说明:从远程仓库(origin)下载所有分支的最新信息到本地,但不会自动合并到当前工作的分支上

🌱命令:git fetch origin <远程分支名> 
说明:从远程仓库(origin)获取远程分支的最新信息但不自动合并到本地分支的指令

🌱命令:git fetch origin <远程分支名>:<本地分支名>
说明:如果不存在本地分支,则自动创建一个新的本地分支,如果存在本地分支,并且满足fast forward条件,则自动合并两个分支。否则会阻止以上操作

3.3.14 远程仓库的最新内容拉到本地,先合并再解决冲突:git pull

🌱命令:git pull origin <远程分支名>:<本地分支名>
说明:远程主机的某个分支的更新取回,并与本地指定的分支合并

🌱命令:git pull origin <远程分支名>
说明:将远程分支与当前分支合并

git fetch与git pull异同点:
相同点:先在作用上他们的功能是大致相同的,都是起到了更新代码的作用。
不同点:(1).git fetch会将数据拉取到本地仓库 - 它并不会自动合并或修改当前的工作,git pull是从远程获取最新版本并merge到本地,会自动合并或修改当前的工作.
	  (2).git fetch更新代码,本地的库中master的commitID不变,还是等于1,使用git pull更新代码,本地的库中master的commitID发生改变,变成了2.

3.3.15 git推送本地分支的更新到远程仓库:git push

🌱命令:git push
说明:如果要推送的远程分支和本地分支同名,且远程已经创建过该分支,则直接使用git push。

🌱命令:git push --set -upstream origin <分支名>
说明:如果要推送的远程分支和本地分支同名,但是远程还没有创建该分支,则使用git push --set -upstream origin <远程分支名>

🌱命令:git push origin <远程分支名>:<远程分支名>
说明:如果要推送的远程分支和本地分支不同名,则使用git push origin 本地分支名:远程分支名

3.3.16 git查看不同分支的文件差异:git diff

🌱命令:git diff <分支名1> <分支名2> <文件名> 
说明:如果要对比两个不同分支上指定文件差异,可以用git diff命令

3.3.17 git显示远程仓库的详细信息:git remote

🌱命令:git remote -v
说明:如果想要显示远程仓库的详细信息,则可以使用git remote -v

3.3.18 git修改分支名称:git branch

🌱命令:git branch -m <旧分支名> <新分支名>
说明:如果要修改分支名称,可以用git branch -m <旧分支名> <新分支名>

3.3.19 查看历史版本:git reflog

🌱命令:git reflog
说明:如果想要查看历史版本号,可以用git reflog,这个命令常用于版本回退

3.3.20 开发的代码有问题,版本回退:git reset、git revert

🌱命令:git reset --hard "回退到的版本号"(将本地代码回退到指定版本)
说明:回退后,使用git push -f,即可将本地代码强制提交,覆盖远程git服务器的代码

🌱命令:git revert [commitid] -n -m 1
说明:回退后,若遇到冲突,则需要合并冲突后,再push到远程仓库

参数说明:
	-n 不自动合并
	-m 是指使用develop分支上merge之前的commit
	 1 代表develop合并了其他分支2,现在要回退的是develop分支,所以为1...
	
两个回退命令区别:
	git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,即回退
	当回退到目标版本,并push后,之前在目标版本后的commit的版本都消失

	git revert是用于“反做”某一个版本,从而达到撤销该版本的修改的目的
	比如,我们commit了3个版本(版本1、版本2、版本3),突然发现版本2有问题,想要撤销版本2,但又不想影响或撤销版本3的提交,就可以用git revert命令来反做版本2,生成新的版本4。
	因此最后会产生一个新的版本,这个版本4会保留版本3的东西,但撤销了版本2的东西,即过去的
	commit依然存在。

3.3.21 协同开发同一个分支

情景:如果你在公司需要和同事共同开发,并且将代码提交到同一个分支上,那么可以如下操作:

一、git fetch origin <分支名>
二、git checkout -b <分支名> origin/<分支名>
三、修改代码...
四、git commit -a -m <Messgae> 
五、git push

3.4 Git的统计

在实际开发中,常常会想查看自己对于某个项目的贡献,管理者会查看项目下各成员的贡献,就需要使用到git的命令进行代码提交的统计。
我们可以如下操作:
①打开项目文件夹,右键点击Git Bash Here
在这里插入图片描述

②复制粘贴如下命令,然后按下回车键即可

git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done | sort -k4 -nr

③最终的统计结果如下图
在这里插入图片描述


四、远程仓库的操作

4.1 Github操作

Github:Github - 软件源代码托管平台

4.1.1 注册并登录账号

4.1.2 新建Github仓库

在这里插入图片描述
在这里插入图片描述
创建成功之后:
在这里插入图片描述

4.1.3 从远程库拉取文件

一、对需要上传的文件内容,右键 --> Git Bush Here 
二、输入初始化命令 git init 回车
三、输入要链接到github的地址,也就是上面图片需要记住的命令:git remote add origin https://github.com/FeihuWang/git-test2.git
四、拉取github上的所有文件到项目中来,git pull origin main

得到的效果:

在这里插入图片描述

4.1.4 将文件推送到远程仓库

一、git add . [将文件添加到暂存区] 
二、git commit -a -m <message> [添加提交信息]
三、git push --set-upstream origin main [在远程创建分支并将代码推送到该分支上]

得到的效果:

在这里插入图片描述

4.2 Gitee操作

码云:Gitee - 基于 Git 的代码托管和研发协作平台

4.2.1 注册并登录账号

4.2.2 新建Gitee仓库

在这里插入图片描述
在这里插入图片描述
创建成功之后:

在这里插入图片描述

4.2.3 从远程库拉取文件

一、对需要上传的文件内容,右键 --> Git Bush Here 
二、输入初始化命令 git init 回车
三、输入要链接到码云的地址,也就是上面图片需要记住的命令:git remote add origin https://gitee.com/wang-feihu/git-test1.git
四、拉取码云上的所有文件到项目中来,git pull origin master

得到的效果:

在这里插入图片描述

4.2.4 将文件推送到远程仓库

一、git add . [将文件添加到暂存区] 
二、git commit -a -m <message> [添加提交信息]
三、git push --set-upstream origin master [在远程创建分支并将代码推送到该分支上]

得到的效果:

在这里插入图片描述


五、总结

以上内容是作者目前在工作中总结得出,显然不够完备,后续将持续补充,还望谅解。在此额外值得一提的是,尽管市面上有很多git可视化工具诸如Source Tree、TortoiseGit等,其虽然帮助我们提高了对Git仓库管理的效率,但是掌握git基本命令和基本知识依然是非常重要的,只有学习和认清背后的本质,才能更好的帮助我们在工作中和同事协同开发。


创作不易,如果有帮助到你的话请给点个赞吧!我是Wasteland,下期文章再见!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wasteland~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值