Git学习
前言
原文版权声明:本文为博主原创文章,遵循 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 masterTo 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
- 这个命令可以忽略之前未同步的历史,而合并起来!
分支操作
分支是Git使用过程中非常重要的概念。使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。
同一个仓库可以有多个分支,各个分支相互独立,互不干扰。
通过git init命令创建本地仓库时默认会创建一个master分支。
git branch 查看分支
git branch 列出所有本地分支
git branch -r 列出所有远程分支
git branch -a 列出所有本地分支和远程分支
git branch [分支名] 创建分支
git checkout [分支名] 切换分支
git push [远程仓库别名] [分支名] 推送至远程仓库分支
git merge [分支名称] 合并分支
解决分支冲突:
当合并分支之后,再分别在两个分支下操作同一个文件再去合并就会出现问题。
这个时候再手动处理一下,再 add,然后提交,接着推送到远程仓库即可。
标签 &命令
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 到远程仓库,想要回到提交前的状态,可以这么操作:
-
打开 Version Control 面板,选择 Log 标签页
-
右键要回退的 commit,选择 Rollback Commit
-
在弹出的窗口中确认回退,选择确定
这样就可以撤销指定的 commit,回到提交前的状态。
另外,也可以通过 Git 的命令行操作完成:
# 查看最近的commit
git log
# 回退到指定的commit
git reset --hard <commit-id>
# 提交前的修改会恢复到工作区
如果已经 push 到远程,还需要强制推送来覆盖远程提交记录:
git push -f
所以在 IDE 或者命令行都是可以轻松回退 commit 的。但是要注意回退 commit 可能会导致其他人的工作被覆盖,请谨慎操作。
修改回我自己的名字
如果提交后的作者名不是你的名字,可以通过以下步骤修改:
- 检查 Git 全局配置
使用git config --global -l
命令,检查当前全局配置的 user.name 和 user.email 是否正确。如果不正确需要重新设置:
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
- 在本地仓库重置用户信息
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"
- 修改最后一次提交的作者信息
使用 commit --amend 命令:
git commit --amend --author="Your Name <your@email.com>"
- 变基到当前提交
比如要修改最近 3 次提交,那么 n 就是 3。
git rebase -i HEAD~n
(n 是提交次数)在 interactive 模式下把每次提交的作者都改成你的名字和邮箱。
- 推送强制覆盖(可能是因为 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/