Git学习

发布时间 2023-09-20 16:02:27作者: Lovi*

前言

原文版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/m0_56265851/article/details/126227742

本文在原文基础上稍作补充和修改,致敬原创

Git

什么是Git?
Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、xml文件、html页面等),
在软件开发过程中被广泛使用。
能干什么?
代码回溯 版本切换 多人协作 远程备份

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

Git 用户信息配置

当安装Git后首先要做的事情是设置用户名称和email地址,这是非常重要的,因为每次Git提交都会使用该用户信息。

设置用户信息
git config --global user.name "名字"
git config --global user.email "邮箱名@xxx.cn"

查看配置信息
git config --list
注意: 上面设置的user.name和user.email并是我们在注册码云账号时使用的用户名和邮箱,此处可以任意设置。


获取 Git 仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库。

获取Git仓库通常有两种方式:
1.在本地初始化一个Git仓库(不常用)
	具体操作步骤:
	a.在任意目录下创建一个空目录作为我们的本地Git仓库
	b.进入这个目录中,点击右键打开Git bash窗口
	c.执行命令git init
	如果在当前目录中看到.git文件夹(此文件夹为隐藏文件夹)则说明Git仓库创建成功
2.从远程仓库克隆(常用)
	可以通过Git提供的命令从远程仓库进行克隆,将远程仓库克隆到本地
	命令: git clone [远程Git仓库地址]
	第一此会进行身份验证: 用户名是 全局配置中的user.email=2133654255@qq.com ;密码是账号密码。


工作区 暂存区 版本区

版本库: 前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等

工作区: 包含.git文件夹的目录就是工作区,也称为工作目录,主要用于存放开发的代码

暂存区:.git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方


工作区 --添加选择的改变git add--> 暂存区 --提交改变git commit--> 版本库

Git 工作区文件状态

1.untracked 未跟踪 (未被纳入版本控制)
2.tracked 已跟踪 (被纳入版本控制)
  2.1 Unmodified 未修改状态
  2.2 Modified 已修改状态
  2.3 Staged 已暂存状态

注: 这些文件状态会随着执行Git命令发变化。

本地仓库操作命令

git status 查看文件状态

git add [文件名] 将文件加入到暂存区

git reset 将暂存区的文件取消暂存或是切换到指定版本
	git reset [文件名]
	git reset --hard [版本号]

git commit 将文件提交到版本库
	git commit -m "附属消息,会记录在日志" [文件名]

git log 查看日志


远程仓库操作命令

git remote -v 查看已配置的远程仓库服务器  会列出每一个远程服务器的简写
			  如果已克隆了远程仓库,至少能看到origin,这是Git克隆的仓库服务器默认名字。

# 这个可以把本地仓库和远程仓库关联上
git remote add [远程仓库别名,习惯为origin] [远程仓库的url] 添加远程仓库

git clone [url] 克隆远程仓库到本地  (几乎是克隆所有数据,包括日志信息、历史信息。)

git push [远程仓库别名,也就是习惯的origin] [分支名称] 将本地内容推送到远程仓库
		  注: 先提交到本地仓库,再推送到远程仓库。
			  git status 查看文件状态
			  git add test.txt 提交到暂存区
	    	  git commit -m"初始化test.txt" test.txt  提交到本地仓库
	     	  git push origin master

git pull [远程仓库别名] [分支名称] 从远程仓库获取最新版本合并到本地仓库
		 注:如果当前本地仓库不是从远程仓库克隆,而是本地创建的仓库,并且仓库中存在文件,此时再从远程仓库拉取文件的时候会报错(fatal: refusing to merge unrelated histories)
		     解决此问题可以在git pull命令后加入参数--allow-unrelated-histories

bug:git push origin master 推送出错:
git push origin master

To https://gitee.com/payboi/test-git2
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'https://gitee.com/payboi/test-git2'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

原因是因为没有把远程仓库的 README.md 文件没下载下来

解决方案:$ git pull --rebase origin master 重新拉取

可以看到,此时已经把 github 上最新的文件下载下来了:

即,那个 README.md 文件

最后再进行推送:git push origin master
————————————————
版权声明:本文为 CSDN 博主「清华大咖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39130650/article/details/99542356


bug: 继续解决本地与远程仓库不一致的问题

  • 以 testGit 为例。

首先我本地初始化一个仓库,并且弄个文件,然后和远程仓关联,这时候,肯定是推送不了仓库的需要合并。

那么就需要用到这个命令:

--allow-unrelated-histories

就是

git pull origin master --allow-unrelated-histories
  • 这个命令可以忽略之前未同步的历史,而合并起来!

image-20230521170430335

分支操作

分支是Git使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
通过git init命令创建本地仓库时默认会创建一个master分支。

git branch 查看分支
	git branch 列出所有本地分支
	git branch -r 列出所有远程分支
	git branch -a 列出所有本地分支和远程分支

git branch [分支名] 创建分支

git checkout [分支名] 切换分支

git push [远程仓库别名] [分支名] 推送至远程仓库分支

git merge [分支名称] 合并分支


解决分支冲突:

当合并分支之后,再分别在两个分支下操作同一个文件再去合并就会出现问题。

这个时候再手动处理一下,再 add,然后提交,接着推送到远程仓库即可。

image-20230521173753195

标签 &命令

Git中的标签,指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。
比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。mybatis-plus的标签就是很典型的例子。

git tag 列出已有的标签

git tag [name] 创建标签

git push [远程仓库别名] [标签名] 将标签推送至远程仓库
		 注: 打版本标签时,记得先将本地仓库push到远程仓库再打标签

git checkout -b [新的分支名] [标签名] 检出标签


在 IDEA 中使用 Git
Git安装路径的exe文件 D:\Git\Git\cmd\git.exe

在 IDEA 中配置 Git
在 IDEA 中使用 Git,本质上还是使用的本地安装的 Git 软件,所以需要在 IDEA 中配置 Git。

在这里插入图片描述

获取 Git 仓库

在 IDEA 中使用 Git 获取仓库有两种方式:

本地初始化仓库
在这里插入图片描述

从远程仓库克隆
在这里插入图片描述

在这里插入图片描述

.gitignore 文件作用: 定义哪些文件不被Git管理
在 IDEA 中使用 Git

本地仓库操作:
将文件加入暂存区
在这里插入图片描述

将暂存区的文件提交到版本库
在这里插入图片描述
在这里插入图片描述
也可以直接点绿勾提交 ,会自动 add 到暂存区,然后 commit。
在这里插入图片描述

查看日志
在这里插入图片描述

远程仓库操作

查看远程仓库
在这里插入图片描述

添加远程仓库

a.本地仓库跟远程仓库创建联系 一个本地仓库可以对应多个远程仓库
在这里插入图片描述

b.克隆远程仓库

推送至远程仓库
在这里插入图片描述

从远程仓库拉取
蓝色向下的箭头也是拉取远程仓库文件的快捷键
在这里插入图片描述

分支操作

查看分支
在这里插入图片描述
在这里插入图片描述
IDEA右下角也可以快速查看分支
在这里插入图片描述

创建分支
在这里插入图片描述
在这里插入图片描述

切换分支
在这里插入图片描述

将分支推送到远程仓库
在这里插入图片描述

合并分支

在这里插入图片描述

git 一些扩展

设置 Git 全局用户信息的命令如下:
# 设置全局用户名
git config --global user.name "Your Name"

# 设置全局用户邮箱
git config --global user.email "your@email.com"

# 检查计算机的 Git 全局配置 git ,必要时重置全局信息。
git config --global --list

其中,user.name 对应用户名,user.email 对应邮件地址。

这会在用户主目录的.gitconfig文件中添加如下配置:

[user]
    name = Your Name
    email = your@email.com

注意事项:

  • 用户名和邮箱建议使用真实有效的信息,这会出现在所有 git commit 的信息中。

  • 使用--global 参数,使配置为全局生效,不加则只对当前仓库有效。

  • 如果只想在某个特定项目中使用特定用户名邮箱,可以在项目目录下运行不带--global 的命令。

  • 可以用 git config --global --unset user.name 来取消全局用户名配置。

配置好全局信息后,新建的仓库可以直接使 用这些信息,不需要重新设置,很方便。

这样 git commit 信息中就可以正确记录提交者信息了。


git 回到提交之前

如果在使用 IntelliJ IDEA 进行 Git 操作时,已经 commit 了修改但还没有 push 到远程仓库,想要回到提交前的状态,可以这么操作:

  1. 打开 Version Control 面板,选择 Log 标签页

  2. 右键要回退的 commit,选择 Rollback Commit

  3. 在弹出的窗口中确认回退,选择确定

这样就可以撤销指定的 commit,回到提交前的状态。

另外,也可以通过 Git 的命令行操作完成:

# 查看最近的commit
git log

# 回退到指定的commit
git reset --hard <commit-id>

# 提交前的修改会恢复到工作区

如果已经 push 到远程,还需要强制推送来覆盖远程提交记录:

git push -f

所以在 IDE 或者命令行都是可以轻松回退 commit 的。但是要注意回退 commit 可能会导致其他人的工作被覆盖,请谨慎操作。


修改回我自己的名字

如果提交后的作者名不是你的名字,可以通过以下步骤修改:

  1. 检查 Git 全局配置

使用git config --global -l命令,检查当前全局配置的 user.name 和 user.email 是否正确。如果不正确需要重新设置:

git config --global user.name "Your Name"
git config --global user.email "your@email.com"
  1. 在本地仓库重置用户信息

même si le nom est déjà utilisé dans des commits précédents.

git config user.name "Your Name"
git config user.email "your@email.com"
  1. 修改最后一次提交的作者信息

使用 commit --amend 命令:

git commit --amend --author="Your Name <your@email.com>"
  1. 变基到当前提交

比如要修改最近 3 次提交,那么 n 就是 3。

git rebase -i HEAD~n

(n 是提交次数)在 interactive 模式下把每次提交的作者都改成你的名字和邮箱。

  1. 推送强制覆盖(可能是因为 gitee 禁止了的原因,我发现我的强制推送生效的只有最新一次的作者名字改变了)
git push -f

这样可以修改提交历史记录中的作者信息,以实际反映开发者。

需要注意的是,修改公共仓库的提交记录可能会影响其他人,需要谨慎操作。


git 忽略的文件

在 pom.xml 同级目录下

HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/

### VS Code ###
.vscode/
/logs/