2025-07/Git
git 分远程仓库 ,本地仓库,本地暂存区
git add ->暂存区 git commit -> 本地仓库 git push -->远程仓库
git init
当前文件夹内创建git仓库
git add .
-- 或 git add 文件名
-- 或 git add 文件夹
添加所有文件进版本控制(暂存区)
git commit -m ' 提交的信息'
git push origin main
提交到 origin 的main分支 可以缩写 git push
git pull
远程同步到本地仓库和 暂存区
git fetch
远程同步到仓库 ,但不和暂存区比对
git merge
git status
本地文件状态
远程相关命令
添加远程仓库
git remote add origin 仓库 或 git remote add github 仓库名
origin 可作为默认
修改远程仓库
git remote set-url origin 地址
删除远程仓库
git remote rm origin 或git remote rm github
提交到远程 git push origin main 缩写 git push
git 文件重命名/移动
git mv 原始 新名
Git分支管理
git branch -M main 切换主分支
Git账户相关
配置 用户名 和邮箱
git config --global user.name "用户名"
git config --global user.email "你的邮箱"
查看配置列表
git config --list
Git相关问题
每次都要输入密码
git config credential.helper store
Git回滚到某个版本或提交
git commit后,如何撤销commit
修改了本地的代码,然后使用:
git add file
git commit -m '修改原因'
执行commit后,还没执行push时,想要撤销这次的commit,该怎么办?
解决方案:
使用命令:
git reset --soft HEAD^
这样就成功撤销了commit,如果想要连着add也撤销的话,--soft改为--hard(删除工作空间的改动代码)。
命令详解:
HEAD^ 表示上一个版本,即上一次的commit,也可以写成HEAD
12
如果进行两次的commit,想要都撤回,可以使用HEAD
--soft
不删除工作空间的改动代码 ,撤销commit,不撤销git add file
--hard
删除工作空间的改动代码,撤销commit且撤销add
另外一点,如果commit注释写错了,先要改一下注释,有其他方法也能实现,如:
git commit --amend
这时候会进入vim编辑器,修改完成你要的注释后保存即可
git reset 命令
本地代码回滚主要围绕着 git reset 命令,该命令会把版本库和工作目录改变为已知状态。具体来讲,git reset 调整 HEAD 引用指向指定的提交,默认情况下还会更新索引以匹配该提交。根据需要,git reset 命令也可以修改工作目录以呈现指定提交代表的项目修订版本。
git reset 命令有三个主要选项:--soft、--mixed、--hard。
soft 提交
--soft 会将 HEAD 引用指向指定提交。索引和工作目录的内容保持不变。这个版本的命令有“最小”影响,只改变一个符号引用的状态使其指向一个新提交。
mixed 提交
--mixed 会将 HEAD 指向指定提交。索引内容也跟着改变以符合指定提交的树结构,但是工作目录中的内容保持不变。这个版本的命令将索引变成你刚刚暂存该提交全部变化时的状态,它会显示工作目录中还有什么修改。--mixed 是 git reset 的默认模式。
hard 提交
这条命令将 HEAD 引用指向给定提交。索引的内容也跟着改变以符合给定提交的树结构。此外,工作目录的内容也随之改变以反映给定提交表示的树的状态。当改变工作目录的时候,整个目录结构都改成给定提交对应的样子。做的修改都将丢失,新文件将被删除。在给定提交中但不在工作目录中的文件将恢复回来。
git reset 选项影响
选项 HEAD 索引 工作目录 --soft 是 否 否 --mixed 是 是 否 --hard 是 是 是
本地代码回滚
首先通过 git log 查找要回退到的提交标记(commit id),该命令显示从最近到最远的提交日志;
$ git log
或者只显示提交的 commit id 和对应的注释的选项,如下:
$ git log --pretty=oneline
36915978c5b7e6cf4364b0b778409ba375e14289 all jar change to release
32989905ae07a92741cfedb0391544666df45885 del jacoco
......
其次,通过 git reset 回滚到指定 commit id;
$ git reset --hard <commit_id>
hard 选项,表示彻底将工作区、暂存区和版本库记录恢复到指定的版本库。
远程仓库代码回滚
将本地回滚的代码推送到远程仓库,这里需要加强制的选项 -f 或 --force;
$ git push -f origin <branch_name>
在强制推送本地回滚的代码到远程仓库时,如针对 master 分支操作很有可能提示未有强制推送的权限,如下提示:
git@MacBook-Pro xxx-xx (master) $ git ps origin head --force
Total 0 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To http://gitlab.xxx.com/xxxx/xxx-xx.git
! [remote rejected] head -> master (pre-receive hook declined)
error: failed to push some refs to 'http://gitlab.xxx.com/xxxx/xxx-xx.git'
以 gitlab 为例,一般 master 分支都会设置成保护分支,不允许 push --force,需要取消设置
Github示例
echo "# snow-framework-java" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/snow-projects/snow-framework-java.git
git push -u origin main
或者
git remote add origin https://github.com/snow-projects/snow-framework-java.git
git branch -M main
git push -u origin main
git其他信息,
1.下载路径
https://git-scm.com/downloads
2.使用git之前需要做的最小配置
配置user.name和user.email,在仓库中,如果local和golable配置不同,local优先起作用
git config --global user.name 'dcc'
git config --global user.email '123@qq.com'
git config --global user.password "123456(新的密码)"
其中global代表当前用户。
3.config的三个作用域
缺省等同于local
git config --local # local只对某个仓库有效
git config --global #global对当前用户所有仓库有效
git config --system #system对系统所有登录的用户有效
显示config的配置,加 --list
git config --list --local #显示当前仓库的配置
git config --list --global # 显示当前用户的配置
git config --list --system #当前系统的所有用户的配置
建git仓库
两种场景:
1.把已有的项目代码纳入git管理
cd 项目代码所在文件夹
git init
2.新建的项目直接用git管理
cd 某个文件夹
git init your_project # 会在当前路径下创建和项目名称同名的文件夹
cd you_project
创建一个文件,然演示提交
clear 清理命令行
git 往仓库里添加文件
工作目录-git add-》暂存区-git commit-》版本历史
git add files 提交文件到暂存区,可以加多个文件,空格分开
git add . 表示提交所有
git add -u 表示提交更新过的,update
git commit -m '提交信息描述' # 提交文件到本地版本历史
git status
查看文件状态
git log 查看提交记录
查看最近n次提交的记录
git log -n
查看提交的内容:git log --oneline
$ git log --oneline
656ab27 (HEAD -> master) image 改名
d8635c8 update
0a9fdf6 修改
140b101 css
9e2b38c js
d373bb1 add index.html
011164e add image
dfa30a4 add me
查看所有分支记录
git log --all
图形化查看
git log --all --graph -n5
按q推出git log
通过图形界面查看提交历史
gitk
给文件重命名
方式一: 相当于移动文件
mv 旧文件 新文件名
git add 新文件
git rm 旧文件
方式二: 只能修改git管理的文件
git mv 旧文件名 新文件名
git reset --hard
暂存区和工作目录都会被清理掉,最好不要执行;
git 分支命令
查看分支
git branch
创建分支
创建dev分支,会自动切换到dev
git checkout -b dev
切换分支
git checkout master
.git目录
cd .git
ls -al
HEAD文件
cat HEAD # 说明当前所在分支
config存放配置信息
refs目录
引用分支信息
heads目录
存放分支信息
比如master
ccDuan@DESKTOP-F9J8CSE MINGW64 /e/gittest/git_learning/.git (GIT_DIR!)
$ cd refs/
ccDuan@DESKTOP-F9J8CSE MINGW64 /e/gittest/git_learning/.git/refs (GIT_DIR!)
$ ls
heads/ tags/
ccDuan@DESKTOP-F9J8CSE MINGW64 /e/gittest/git_learning/.git/refs (GIT_DIR!)
$ cd heads/
ccDuan@DESKTOP-F9J8CSE MINGW64 /e/gittest/git_learning/.git/refs/heads (GIT_DIR!)
$ ls
dev master
ccDuan@DESKTOP-F9J8CSE MINGW64 /e/gittest/git_learning/.git/refs/heads (GIT_DIR!)
$ cat master
656ab27ee9799dca5d5fbbd2e64d54fb6f5e07fd
git cat-file -t 查看文件类型
git cat-file -t 656ab27ee
commit类型
git cat-file -p 查看内容
tag目录
存放tag类型
objects目录
存放tree类型
pack存放打包文件
commit,tree,bolob对象的关系
commit指每次的变更
一个commit对应一个tree,tree代表文件夹
blob代表文件