学习链接
【Git从入门到精通】01-初识Git - VectorUx
【Git从入门到精通】02-深入Git - VectorUx
超简单的Git快速入门
git的分支管理(详细版)
Git基本使用(很详细)
【git tag使用】
Git优雅使用:git tag操作
Git中tag使用教程
git tag使用
1、git tag作用
tag是一个标签或者说是一个记录点,可以用于对某个commit点或分支进行标记,比如项目中V1版本对应某个commit点,对这个commit打一个V1 tag,那么,在查找或者回退代码时,可以直接查找V1找到对应的源码,相比去查找commit id更加方便与人性化。
2、git tag命令
1、创建tag
git tag <tag名字> // 直接给当前的提交版本创建一个创建 tag
git tag -a <tag名字> -m <注释文字> // 创建带注释的tag
git tag 标签名 提交版本号 // 给指定的提交版本创建一个tag
2、查看tag
git tag //查看本地所有tag
git ls-remote --tags origin //查看远程所有tag
git show <tag名字> //查看 tag 详细信息
3、提交tag
git push origin <tag名字> // 推送单个tag到远程
git push origin --tags // 推送所有本地tag到远程
4、删除tag
git tag -d <tag名字> // 删除本地tag
git fetch // 删除本地tag后, 可以重新拉取远程新分支和新tag
git push origin :<tag名字> // 删除远程tag
git push origin :regs/tags/<tag名字> // 删除远程仓库中的 指定标签
git push origin --delete <tag名字> // 删除远程仓库中的 指定标签
5、切换tag
git checkout <tag名字> // 切换到指定的tag(git clone 整个仓库后使用,以下命令就可以取得该 tag 对应的代码了)
git checkout -b <新分支名称> <tag名字> // 如果要在 tag 代码的基础上做修改,你需要一个分支
git 分支描述
给分支添加描述信息
git config branch.release2.description '分支描述'
查看分支描述
git config branch.release2.description
.gitignore的用法
Git忽略文件.gitignore详解
这个文件的作用也就是可以让我们忽略掉一些不应该被加入到版本库中的文件。
在工程中,并不是所有文件都需要保存到版本库中的,例如“target”目录及目录下的文件就可以忽略。在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件或目录。
Git 忽略规则优先级
在 .gitingore 文件中,每一行指定一个忽略规则,Git 检查忽略规则的时候有多个来源,它的优先级如下(由高到低):
- 从命令行中读取可用的忽略规则
- 当前目录定义的规则
- 父级目录定义的规则,依次递推
- $GIT_DIR/info/exclude 文件中定义的规则
- core.excludesfile中定义的全局规则
Git 忽略规则匹配语法
在 .gitignore 文件中,每一行的忽略规则的语法如下:
- 空格不匹配任意文件,可作为分隔符,可用反斜杠转义
- 开头的文件标识注释,可以使用反斜杠进行转义
- ! 开头的模式标识否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用 ! 也不会再次被包含。可以使用反斜杠进行转义
- / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件
- / 开始的模式匹配项目跟目录
- 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录
- ** 匹配多级目录,可在开始,中间,结束
- ? 通用匹配单个字符
- * 通用匹配零个或多个字符
- [] 通用匹配单个字符列表
常用匹配示例
bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
.gitignore规则不生效
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
你想添加一个文件到Git,但发现添加不了,原因是这个文件被.gitignore忽略了:
$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.
如果你确实想添加该文件,可以用-f强制添加到Git:
$ git add -f App.class
或者你发现,可能是.gitignore写得有问题,需要找出来到底哪个规则写错了,可以用git check-ignore命令检查:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
Git会告诉我们,.gitignore的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
Java项目中常用的.gitignore文件
# Compiled class file
*.class
# Eclipse
.project
.classpath
.settings/
# Intellij
*.ipr
*.iml
*.iws
.idea/
# Maven
target/
# Gradle
build
.gradle
# Log file
*.log
log/
# out
**/out/
# Mac
.DS_Store
# others
*.jar
*.war
*.zip
*.tar
*.tar.gz
*.pid
*.orig
temp/
删除git中的某一个文件或文件夹
git rm -r .idea
git常规用法
初始化设置
# --global 可以改为 --local(仅当前仓库) --system(对所有用户)
# 配置用户名
git config --global user.name "Your Name"
# 配置邮箱
git config --global user.email "mail@example.com"
# 存储配置
git config --global credential.helper store
# 查看配置
git config --list
git下载代码
git clone git地址
git通过命令行下载git仓库的某个分支
git clone -b 分支名 git地址
# 或者
git clone git地址 --branch 分支名
git全局配置
git config --global user.name "zzhua"
git config --global user.email "1255112011@qq.com"
2.git命令
#初始化git管理的文件夹
git init
#添加所有文件到git的暂存区
git add .
#提交到本地仓库
git commit -m ''
#关联远程git
git remote add origin https://gitee.com/zzhua195/test2.git
#推送到远程主分支
git push -u origin master
#从当前分支切换到->新分支
git checkout -b devv
#推送本地代码新分支到远程新分支->devv分支
git push -u origin devv
#拉取代码(master分支)
git clone https://gitee.com/zzhua195/test.git
#从当前分支切出一条新的分支,并切换到devv分支【-b新建分支】
git checkout -b devv
#从新建的devv分支上,拉取远程devv分支
git pull origin devv
#checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
git checkout -b dev origin/dev
#切换分支
git checkout master
git checkout devv
#查看本地分支及当前所在分支
git branch
#删除本地某个分支
git branch -d devv2
#查看远程分支情况
git branch --remote
查看所有分支,本地和远程都有, 按q退出查看
git branch -a
#查看git当前状态(可以使用git status -s 以简略的方式查看git当前状态)
git status
#查看远程仓库地址
git remote -v
# 查看提交记录
git log
# 查看提交记录(添加--oneline仅显示提交id和提交信息这些简洁的信息)
git log --oneline
# 查看所有历史提交记录(当回退版本后,能查看到所有的提交版本, 而git log只能看到回退版本之前的提交版本;
# 当使用git reset命令回退到之前的版本后, 就可以使用git reflog)
git reflog
# 回退版本(参数可选: --soft(工作区和暂存区都不会被清空)、
# --hard(工作区和暂存区都会被清空)、
# --mixed(工作区不会被清空,暂存区会被清空),
# 提交id可以通过git log --oneline查看到,回退到指定提交id的版本)
# 使用这个方法, 可以将本地的多次提交合并成1次提交
git reset --soft 提交id
# 查看暂存区中的文件(所有添加到暂存区中的文件)
git ls-files
# 回退到上一个版本
git reset --hard HEAD^
git diff
# 1. 用于查看文件在工作区、暂存区、本地仓库之间的差异
# 2. 用于查看文件在不同版本之间的差异
## 后面不接参数, 会默认比较的是工作区和暂存区之间的差异内容(如果输出为空, 则说明工作区与暂存区是相同的)
git diff
## 比较当前工作区与版本库的差异(HEAD表示的是当前分支的最新提交)
git diff HEAD
## 比较当前工作区与暂存区的差异
git diff --cached
## 比较当前工作区与暂存区的差异(作用同git diff --cached)
git diff --staged
## 比较2个特定提交版本之间的差异
git diff 提交id1 提交id2
## 比较指定提交版本id与当前版本的差异(HEAD表示的是当前分支的最新提交版本)
git diff 提交id1 HEAD
## 比较指定提交版本id与当前版本的上1个版本差异(HEAD^或HEAD~表示的是当前分支的最新提交)
git diff 提交id1 HEAD^
## 比较指定提交版本id与当前版本的上的第2个版本差异(HEAD~2表示的是当前分支的最新提交之前第2个版本)
git diff 提交id1 HEAD~2
## git diff后可以接文件名, 就可以只查看这个文件的差异内容
git diff HEAD~ HEAD~2 file3.txt
## git diff还可以查看2个分支之间的差异
git diff 分支名1 分支名2
git rm
## 查看暂存区中的文件(所有添加到暂存区中的文件)
git ls-files
## 删除1个文件, 然后把这个删除文件的操作添加到暂存区, 让暂存区中也删除这个文件
rm file4.txt
git add file4.txt
## 从工作区和暂存区删除一个文件, 并且将这次删除放入暂存区(可以使用git rm 文件名代替上面rm 文件名和git add 文件名的2个操作)
git rm file5.txt
## 把文件从暂存区中删除, 但保留在当前工作区中(但是操作之后如果后悔了, 可以执行git restore --staged file6.txt来重新添加到暂存区)
git rm --cached file6.txt
## 递归删除某个目录下的所有子目录和文件
git rm -r *
## 加入不小心把.idea文件夹给提交了, 但是这个.idea也需要保存在本地
git ls-files # 查看暂存区中是有.idea的
git rm -r --cached .idea*
git ls-files # 查看暂存区中没有.idea了
git commit -m '删除.idea' # 将暂存区对.idea的删除操作提交到本地仓库; 然后再建立1个.gitignore文件将.idea写入到该文件中,来始终忽略.idea这个文件夹
3.合并分支
#1、首先切换到master分支上
git checkout master
#2、如果是多人开发的话 需要把远程master上的代码pull下来
git pull origin master
//如果是自己一个开发就没有必要了,为了保险期间还是pull
#3、然后我们把dev分支的代码合并到master上
git merge dev
#4、然后查看状态及执行提交命令
git status
On branch master
Your branch is ahead of 'origin/master' by 12 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
//上面的意思就是你有12个commit,需要push到远程master上
> 最后执行下面提交命令
git push origin master
#5、其他命令
更新远程分支列表
git remote update origin --prune
查看所有分支
git branch -a
删除远程分支Chapater6
git push origin --delete Chapater6
删除本地分支 Chapater6
git branch -d Chapater6
强制回退本地版本git命令
git reset --hard origin/分支名
4.git下载远程某个分支
找一个干净目录,假设是git_work
cd git_work
git clone http://myrepo.xxx.com/project/.git ,这样在git_work目录下得到一个project子目录
cd project
git branch -a,列出所有分支名称如下:
remotes/origin/dev
remotes/origin/release
git checkout -b dev origin/dev,作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
git checkout -b release origin/release,作用参见上一步解释
git checkout dev,切换回dev分支,并开始开发。
git撤销最近的提交
可参考:如何撤销git的commit
如果您已提交了错误的代码或个人信息,而且您还没有将这个错误推送到远程仓库,那么最简单的方法是撤销这个提交。
- 查看提交历史记录
要撤消提交,请首先使用以下命令查看您的提交历史记录:
这将显示您近期的所有提交。请注意每个提交的哈希值,这将有助于后续步骤。git log
- 撤销提交
要撤消最近的提交,您可以执行以下命令
这将取消最近的一次提交,但会保留您对该提交所做的更改。git reset HEAD~1
上图中,HEAD~1表示"撤销最近的一次提交"。
要同时还原所有更改,可以使用以下命令:
这将撤销最近的提交并还原所有更改。git reset HEAD~1 –hard
Git : 本地分支与远程分支的映射关系
概述
本文介绍 git 环境中本地分支与远程分支的映射关系的查看和调整。
1、查看本地分支与远程分支的映射关系
执行如下命令,
git branch -vv
注意就是两个 v ,没有写错。
可以获得分支映射结果:
dev fa***** [github/dev] update
* main 2e***** [github/main] update
可以看出
本地分支dev 映射 远程分支 [github/dev]
本地分支main 映射 远程分支 [github/main]
2、撤销本地分支与远程分支的映射关系
将本地分支与远程分支的映射关系给解除,方能创建新的映射关系。
执行如下命令解除关联:
git branch --unset-upstream
无报错则表示执行成功了,接下来再查看本地分支与远程分支映射关系(执行上面的 git branch -vv 命令)。
dev 2e53e8a [github/dev] update
* main 2e53e8a update
可以看到main本地分支与远程分支的映射关系已经撤销。
3、建立当前本地分支与远程分支的映射关系
执行如下命令:
git branch -u origin/main
这里的 origin/main 就是要映射的远程分支完整路径名称。
或者使用命令:
git branch --set-upstream-to origin/main
总结
请注意⚠️:本地分支与远程分支建立映射关系可以不同名呢!
在 idea 中,提交代码的时候我们可以指定远程分支进行提交,不一定是用默认分支进行提交。