一 Git工具的初始化配置
程序开发人员在日常开发过程中,使用 git 可能会遇到这样一个情况:
公司项目使用公司账号提交git信息。
- 个人业余项目使用个人账户提交git信息。
- 也就是说,我们需要 git 根据不同项目使用不同的账号及邮箱提交相关记录
那么这个时候就有这么一个命令来帮助我们来管理本地与全局的账号信息管理,
它就是git config
1.本地设置
- 前提:你先有一个本地repo仓库,也就是初始化之后的本地仓库
本地设置有两种方式,命令方式 和 配置文件方式,两种方式选择任意一种,都可以配置当前git项目提交git信息的账号及邮箱。
- 命令行方式
- 对于本地 git repo 配置,先进入 本地git repo 目录,使用命令:
git config user.name "your-username" git config user.email "your-email-address"
- 配置文件方式
- 对于本地 git repo 配置,先进入 本地git项目 目录,编辑 .git/config 文件,增加以下信息:
[user] name = your-username email = your-email-address
- 保存并退出。以上 命令方式 和 配置文件方式 两种方式,都可以在 本地git repo 目录下,通过以下命令查看本地项目的账号及邮箱是否更改成功。
git config user.name
- 注意:
对于很多个 本地git repo 来说,每个 本地git repo 都要设置自定义化git本地账号及邮箱,有时我们不想每个都设置,我们可以使用git的全局配置,所有 本地git repo 都是使用全局配置!
2.全局设置
全局设置有两种方式,命令方式 和 配置文件方式,两种方式选择任意一种,都可以配置全局git项目提交git信息的账号及邮箱。
命令方式
在git服务器中,任意非本地git repo 中,使用以下命令配置全局配置:
git config --global user.name "your-username"
git config --global user.email "your-email-address"
配置文件方式
编辑 〜/.gitconfig,其内容与 .git/config 文件中的内容相同,即将 [user] 部分信息添加至 〜/.gitconfig 文件中,内容如下:
[user]
name = your-username
email = your-email-address
保存并退出。任意非 本地git repo 中,在使用以下命令查看是否配置成功
git config user.name
3. 配置gitee仓库私钥流程
- 首先创建本地的ssh密钥
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest
$ ssh-keygen.exe
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/17559/.ssh/id_rsa):
/c/Users/17559/.ssh/id_rsa already exists.
Overwrite (y/n)?
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest
$
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest
$ cd /c/Users/17559/.ssh/
17559@JShan MINGW64 ~/.ssh
$ ls
config id_ed25519.pub id_rsa.pub known_hosts.old
id_ed25519 id_rsa known_hosts
17559@JShan MINGW64 ~/.ssh
$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKvgt503Su6sqJkacdjQQLsSmCC+IIt+3a0eF/YIWp4eZNcahIDiL+syc6+ETDpd7kWz+56FOvDzQMpk8d3k0poUpcTwm5H4ngEU0OdOcrRPjMUxs5woIMLWj6GyqM4k8JcbiafPo8EYKm37j9lFG1yREXXM4Kp5h1tFBWOc4sHV+NRL23fVPlYZaJCkNypYyD4EvlyWty
4. .gitignore
文件忽略文件不用被git管理
.gitignore 文件是一个用来指定 Git 忽略哪些文件或目录的配置文件。这些被忽略的文件不会被 Git 跟踪或提交到版本控制系统中,这在许多情况下是非常有用的,比如临时文件、编译生成的文件、依赖库等等。
基本语法:
.gitignore 文件中的每一行表示一个要忽略的文件或目录,可以使用通配符模式进行匹配。常见的通配符有:
- *: 匹配零个或多个字符
- ?: 匹配任意一个字符
[abc]
: 匹配括号中任意一个字符- **: 匹配零个或多个子目录
# 忽略所有 .log 文件
*.log
# 忽略所有 build 目录
build/
# 忽略所有 .tmp 扩展名的文件
*.tmp
# 忽略特定目录下的所有 .dll 文件
/some_directory/*.dll
# 忽略特定文件
example.exe
二 命令行入门
1. 启用默认的颜色设置
git config --global color.ui true
2. 初始化项目仓库
# 1、本地没有文件夹
git init test
# 2、本地有项目目录
git init .
3、提交命令
# 1、首先创建一个文件
touch 1.txt
# 2、查看本地暂存区的文件状态
git status
# 3、添加文件到暂存区
git add <file> # 将特定文件添加到暂存区
git add . # 将当前目录及其子目录中的所有更改添加到暂存区
git add -A # 将工作目录中的所有更改添加到暂存区(推荐使用)
# 4、提交到本地仓库
git commit -m "注释"
3.1 补充.gitignore
文件
# 1. 在这个文件中的文件不会被git add 管理
# 创建 .gitignore 文件
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ cat .gitignore
hello.txt
# 创建 hello.txt 文件 然后进行测试 可以看到没有hello.txt 的文件可以提交,但是这个文件确实是被创建了
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ touch hello.txt
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ ls
1.txt ddd/ hello.txt
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ git add .
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
# 可以看到上述是没有过滤的黑名单文件的此时可以创建其它文件进行测试
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ touch hello1.txt
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello1.txt
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ git add .
17559@JShan MINGW64 /d/桌面/java/周二内容/gitProjectTest/test (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
new file: hello1.txt
4、查看历史记录的命令git log
git log 是 Git 中用于查看项目提交历史的命令。它可以显示提交的详细信息,如提交的哈希值、作者、日期和提交信息。以下是一些常见的使用方式和选项:
- 显示提交历史
# 这将按时间顺序列出所有提交,最近的提交在最上面。
git log
- 限制提交的数量
# 只显示最近的 2 次提交。
git log -n 2
- 显示单行日志
# 每个提交仅显示一行
git log --oneline
- 显示图形化的提交历史:
# 以 ASCII 图形显示提交历史的分支和合并。
git log --graph
- 显示包含特定关键字的提交:
git log --grep="关键字"
- 显示特定时间范围内的提交:
git log --since="2024-05-14" --until="2024-05-15"
5、移除暂存区的命令
5.1 git rm --cached
# 1、创建测试文件
touch {jiabao.txt,jiayi.txt,jiao.txt,test.txt}
# 2、添加文件到暂存区
git add .
# 3、在暂存区移除文件
git rm --cached jia*
语法解释
git rm
:这是用于从 Git 仓库中删除文件的命令。--cached
:这个选项告诉 Git 仅从暂存区中移除文件,而不从工作区中删除它们。jia*
:这是一个通配符模式,表示所有以jia
开头的文件。通配符 * 可以匹配任意字符和长度的字符串。
执行后
- 运行
git rm --cached jia*
后,Git 将从暂存区中移除jiabao.txt
, 和jiao.txt
,但它们仍然存在于工作区中。文件test.txt
不受影响,因为它的名称不符合jia*
模式。
5.2 git reset
- 取消暂存一个文件:
# 这将把 file 文件从暂存区移除,但文件的更改仍然保留在工作区。
git reset HEAD <file>
- 取消暂存区所有文件
# 不指定文件将移除所有暂存区的文件
git reset HEAD
6、查看文件状态
git status
命令可以查看工作区里有哪些文件需要被提交,以及是否被git跟踪
# 显示当前状态
git status
- 简洁输出
git status -s
git status --short
参数说明:
M
表示已修改但未暂存
A
表示已暂存的新增文件
??
表示未跟踪的文件
- 显示忽略的文件
git status --ignored
- 显示当前分支信息
git status -b
7、git中删除文件的操作
- 从工作区和暂存区删除文件:
# 已经提交过的文件想要删除,可以使用 git rm
# 使用 git rm 命令,这将删除文件并将删除操作添加到暂存区。
git rm <file>
- 从工作区删除文件,但保留在暂存区:
# 如果你只想从工作区删除文件但保留在暂存区,可以使用 rm 命令手动删除文件,然后运行 git add 以便让 Git 知道文件已被删除。
rm <file>
git add <file>
- 只从暂存区删除文件,但保留在工作区:
# 使用 git rm --cached 命令,这将从暂存区删除文件,但保留文件在工作区。
git rm --cached <file>
- 删除目录
# 如果要删除一个目录及其包含的所有文件和子目录,可以使用 -r 选项:
git rm -r <directory>
- 强制删除
# 如果文件被修改过且不在暂存区中,可以使用 -f 选项强制删除:
git rm -f <file>
8、文件重命名
git mv <old_file_name> <new_file_name>
9、版本回退
补充提交命令
如果一个文件已经被git所管理,并且被修改,可以使用
git commit -a -m "注释"
直接提交代码 这相当于先运行git add -u
(更新暂存区中的所有更改),然后运行git commit
。
- git log可以查看历史版本记录
- git reset --hard命令可以回退版本
- git reset --hard HEAD^ 回退到上个版本
- HEAD表示当前版版本
- HEAD^ 表示上1个版本
- HEAD^^ 上2个版本
也可以直接git reset --hard 版本id号
# 1、回退到上一个版本
git reset --hard HEAD^
# 2、回退到上2个版本
git reset --hard HEAD^^
# 3、指定版本id进行跳转
git reset --hard id
- 重新回到最新的版本
git reflog
是 Git 中一个非常有用的命令,用于记录对本地仓库引用(尤其是 HEAD)的所有更新。它能够显示所有的提交历史,即使这些提交已经被删除或分支已经被移动。这对于找回丢失的提交或查看仓库的操作历史非常有用。
# 通过`git reflog` 找到历史的操作记录,然后通过git reset --hard id 进行跳转,回到最开始的分支
git reflog
git reset --hard id
10、文件撤销
10.1 修改并添加到暂存区并提交
- 这种情况下,如果文件没有啥用,直接删除即可
- 如果还有一种就是回退到上一次提交的版本,如果还不行就没有办法了
10.2 只修改了文件,还没有添加到暂存区或者还没有commit提交
- 还没有添加暂存区,使用
git checkout -- 文件名
就可以直接撤销修改了 - 添加暂存区,还没有提交,使用
git reset HEAD 文件名
取消暂存区添加,再git checkout -- 文件名
来撤销修改
三 git分支与仓库
1、分支下的操作
注:
分支下写的代码,另外的分支是看不到的
- 创建分支
# 1、创建一个分支
git branch dev
# 2、查看所有分支
git branch
- 切换分支
git checkout dev
- 分支下写代码,然后切换分支进行查看:
# 1、创建新的文件,模拟新的代码变更
mkdir a
touch a/1.txt
git add .
git commit -m "创建"
# 查看当前分支下的文件变化 可以看到新创建的 a文件夹
ls
1.txt 2.txt a/ hello.txt jiabao.txt jiao.txt jiayi.txt sss.txt
# 切换分支
git checkout master
# 查看文件目录情况
$ ls
1.txt 2.txt hello.txt jiabao.txt jiao.txt jiayi.txt sss.txt
- 合并dev分支的代码到master主干线上来
# 1、只将代码进行合并
$ git checkout master
Switched to branch 'master'
$ git merge dev
Updating c16bfe2..7f57cdc
Fast-forward
a/1.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a/1.txt
$ ls
1.txt 2.txt a/ hello.txt jiabao.txt jiao.txt jiayi.txt sss.txt
# 2、适用于希望保持提交历史线性,将 dev 分支的更改在 master 分支之上重新应用。
# 首先需要在分支上进行 git rebase master 操作,然后在master上进行 git merge dev 合并操作
- 删除分支
git branch -d
# 在master分支下,查看所有的分支,并选择想要删除的分支
git branch
git branch -d ops
2. 代码冲突
-
首先在
dev
分支上对2.txt
进行修改并提交 -
然后切换分支到
master
分支上 也对2.txt
文件进行修改 -
然后进行合并操作,会出现代码冲突的情况
-
上述是在
master
分支上进行代码合并出现的代码冲突 -
此时需要将多余的符号以及不需要的内容进行删除,重新提交即可
3. tag标签实践
3.1 为什么使用tag
git不是已经有commit了吗,可以附加提交信息,为什么还要tag呢?
开发小王:请吧上周一发布的版本打包发布,commit_id是3f6cccf0708525b58fe191c80325b73a54adee99
小于:你这什么乱七八糟的数字,,,太难找了,请你换个方法
开发小王换了个方式:请把上周一发布的版本打包,版本号是v1.2,按照tag v1.2,查找commit 记录就行了!
所以tag就是一个容易记住的名字,和某个commit记录绑定在一起。
3.2 tag标签实践
# 1. 对当前以存在的commit 进行打标签
git tag -a 'v1.0' -m '修复xxxbug'
# 2、查看当前tag
git tag
# 3、查看tag对应哪个commit
git show <指定tag名称>
# 4、git log --oneline 也可以查看commit对应的tag
git log --oneline
# 5、给指定的commit记录,打上标签
git tag -a '<tag_标签名称>' <版本id> -m '注释'
# 6、查看tag并显示注释
git tag -l -n
# 7、删除tag
git tag -d <tag标签>
4. 远程仓库
- 创建一个空的仓库,然后将本地代码上传到仓库中
# 添加远程仓库地址 可以添加https地址 也可以添加ssh地址,上边设置了密钥的方式,这里使用ssh方式
git remote add origin <address>
# 推送代码到gitee仓库中
git push -u origin "master"
- 查看远程仓库的信息
git remote -v
- 删除远程仓库的地址信息,也就是断开你local repo 和 码云repo的关系
git remote remove origin
- 修改
orgin
地址
git remote set-url origin <address>
- 如果想要将tag也推送到gitee仓库中
# 查看本地所有的tag
git tag
# 选择推送的tag
git push origin <tag标签名>
# 推送所有的tag标签
git push origin --tags
- 查看远程仓库所有的tag标签
git ls-remote --tags origin