一、git 常用命令
-
git 生成密钥
生成密钥: ssh-keygen -t rsa -C "junbo.zhang0405@163.com" (本人一般用) ssh-keygen -t rsa -C "junbo.zhang0405@163.com" -f ~/.ssh/my_custom_key -t 指定密钥类型 默认rsa -C 设置注释文字 比如邮箱 -f 指定密钥文件存储路径文件名 保存密钥: 输入保存密钥名,回车默认为 ~/.ssh/id_rsa (Enter file in which to save the key (/c/Users/xxx/.ssh/id_rsa)) 设置密码: 输入密码,用于加密私钥。留空则无密码 Enter passphrase (empty for no passphrase): 生成文件: id_rsa(私钥)和 id_rsa.pub(公钥),位于 C:\Users\xxx\.ssh 目录下 添加密钥: 点击gitlab头像 > settings > SSH keys 将生成的id_rsa.pub文件中的密钥拷贝粘贴进去即可
-
查看git版本
git --version
-
配置全局变量
git config --global user.name "zhangsan" git config --global user.email "zhangsan@163.com"
-
在当前目录查看配置
ls -a .gitconfig git config --list git config -l
-
初始化git仓库
git init ls -la 里面有git文件
-
clone
git clone https://github.com/*******.git clone远程master git clone -b dev https://github.com/*******.git clone远程dev分支
-
查看更新状态
git status 文件更改 git status -s 查看Modified状态文件
-
添加文件到缓存区
git add . 添加所有 git add 文件名,可单可多,空格分开
-
git commit 提交文件
git commit -m '描述' 然后查看 git status 会出现`nothing to commit`
- commit注释写错,只是想改一下注释
此时会进入默认vim编辑器,修改注释完毕后保存git commit --amend 注释 git commit --a 注释
- commit注释写错,只是想改一下注释
-
查看log日志
git log 会出现`commit` 记录 commit vdfsの32efefv'shgs 点击q 退出
-
创建新分支和切换分支
git checkout test # 切换分支 git checkout -b test # 创建分支并切换分支
-
git log
git log 查看提交历史 git log --pretty=oneline 查看提交的历史 git log --all a git log -p 查看修改内容 git log -p -- application/api/v1/users.py 查看具体文件修改内容 git log -- oneline 查看提交日志 git log -- oneline --all 查看所有日志 git log --graph 显示分支合并的ASCII图 git reflog 查看未来历史
-
git diff
git diff 查看文件修改的状态(unstaged) git diff --cached 查看staged状态和与上次commit状态不同(目前staged) git diff HEAD 查看statge 与unstatge
-
git tag
git tag -a v1 -m v1版本描述” 打标签通常用于版本迭代 git show v1.5 查看标签完整信息 git tag -l 列出所有的本地标签 git tag -l -n 列出所有的本地标签及其注释信息
-
git reset 版本回退
--mixed:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作 git reset commit_id git reset --mixed commit_id --soft: 回退到上一个提交,并保留当前工作目录的更改(即未暂存的更改) git reset --soft commit_id --hard: 完全回退到某个特定的提交,并放弃所有之后的更改 删除工作空间改动代码,撤销commit,撤销git add . git reset --hard HEAD 回退到最近commit(即143a922) git reset --hard HEAD^ 回退到上次commit (即ed23a00 ) git reset --hard HEAD^^ 回退到上上次commit (即3dc309a) git reset --hard HEAD~2 回退到上上次commit (即3dc309a) git reset --hard ea3da92 回退到某个历史 git log --oneline git checkout ea3da92 -- application/api/v1/users.py 回退某个文件
- 情景一git commit之后,想撤销commit,代码仍然保留
执行完commit后,想撤回commit,怎么办?git add . //添加所有文件 git commit -m "本功能全部完成"
git reset --soft HEAD^
- 情景一git commit之后,想撤销commit,代码仍然保留
合并分支(身处分支2)
git merge 分支名1
将要合并的分支1 合并到(身处分支2中)
Auto-merging **.py
CONFLICT (content): Merge conflict in **.py
Automatic merge failed; fix conflicts and then commit the result
意为冲突了
查看身处分支2,修改冲突 git pull 拉去查看冲突
重新提交即可
git切换分支后代码进行更新
git remote origin http://***.git 给仓库起个别名叫origin,或者origin 代表 仓库地址
git pull origin xxx分支名称
添加远程仓库
git remote add github https://github.com/*******.git
查看远程仓库版本
github https://github.com/********.git(fetch) 拉代码地址
github https://github.com/********.git(push) 推代码地址
推代码
git push -u 远程仓库名 分支名
关联远端分支
git push --set-upstream origin prototype
git push --set-upstream origin feature/dev_20250423_mcp
git branch --set-upstream-to=origin/远程分支 本地分支
git 本地有分支 远程没有分支 在远程创建dev-psql 将本地分支dev-psql与远程分支dev-psql的映射关系
git push --set-upstream origin dev-psql
git clone --bare https://github.com/fenghualanglang/study_everything.git
分支
将dev分支合并到master上, 此时身处 master分支, 执行一下语句
git merge --no-ff-m ''说明信息' dev
或
git merge dev
临时修复
临时有事出去啦,将文件暂存
git stash
将文件返回
git stash pop
开始一个工作区(参见:git help tutorial)
clone | 克隆一个仓库到一个新目录 |
---|---|
init | 创建一个空的 Git 仓库或重新初始化一个已存在的仓库 |
在当前变更上工作(参见:git help everyday)
add | 添加文件内容至索引 |
---|---|
mv | 移动或重命名一个文件、目录或符号链接 |
reset | 重置当前 HEAD 到指定状态 |
rm | 从工作区和索引中删除文件 |
检查历史和状态(参见:git help revisions)
bisect | 通过二分查找定位引入 bug 的提交 |
---|---|
grep | 输出和模式匹配的行 |
log | 显示提交日志 |
show | 显示各种类型的对象 |
status | 显示工作区状态 |
扩展、标记和调校您的历史记录
branch | 列出、创建或删除分支 |
---|---|
checkout | 切换分支或恢复工作区文件 |
commit | 记录变更到仓库 |
diff | 显示提交之间、提交和工作区之间等的差异 |
merge | 合并两个或更多开发历史 |
rebase | 本地提交转移至更新后的上游分支中 |
tag | 创建、列出、删除或校验一个 GPG 签名的标签对象 |
协同(参见:git help workflows)
fetch | 从另外一个仓库下载对象和引用 |
---|---|
pul获取并整合另外的仓库或一个本地分支l | |
push | 更新远程引用和相关的对象 |
1. git rebase 如何多次提交使用一个rebase
Git rebase 允许你合并多个提交为一个提交。以下是如何使用 git rebase 将多次提交合并为一个的步骤:
-
使用 git log 查看提交历史,并找到你想要合并的提交的范围。
-
如果你想合并最后几个提交,可以使用
git rebase -i HEAD~n n是你想要合并的提交数
-
在文本编辑器中,你会看到一个提交列表,每个提交前都有 pick 字样。
-
要合并提交,将除了第一个提交之外的
pick
改为squash
或简写为s
。
保存并关闭编辑器,Git 将开始 rebase 操作,并将选定的提交合并为一个
- 如果需要,修改合并后的提交信息,并保存退出。
例子:
假设你有四个连续的提交,你想把它们合并为一个:
git rebase -i HEAD~4
然后在编辑器中,你会看到类似的内容:
pick 1234567 第一个提交信息
pick 890abcd 第二个提交信息
pick efghijk 第三个提交信息
pick lmnopqr 第四个提交信息
要合并这些提交,你可以把除了第一个 pick 之外的都改为 squash:
pick 1234567 第一个提交信息
squash 890abcd 第二个提交信息
squash efghijk 第三个提交信息
squash lmnopqr 第四个提交信息
保存并关闭编辑器后,Git 将开始 rebase 操作,并在最后合并这四个提交为一个。最后,你可能需要修改这个合并后的提交信息。
方式2: 要将所有的提交记录合并为一个,使用 Git 的 rebase 命令进行交互式变基操作
- 步骤 1: 确保你在正确的分支上
假设你想要合并在 main 分支上的所有提交,首先确保你在该分支上:git checkout main
- 步骤 2:找到第一个提交的父提交哈希值
git log命令找到你的项目历史中的第一个提交的父提交哈希值
假设第一个提交的父提交哈希值是 abc1234,则命令如下:git rebase -i abc1234
- 步骤 3: 开始交互式变基
这将会打开一个交互式界面,除了第一行之外的所有 pick 命令前的文字都应该更改为 squash 或者简写的 s,这样 Git 就会将这些提交合并到第一个提交中。 - 步骤 4: 解决可能的冲突
保存并关闭编辑器后,Git会尝试自动合并提交。
如果遇到冲突,Git会暂停rebase过程,让你有机会手动解决冲突。
解决冲突后,使用git add 添加已解决冲突的文件,
然后运行git rebase --continue继续rebase过程。 - 步骤 5: 完成
一旦所有提交被合并,将看到一个新的提交历史,其中所有被squash的提交都合并到了一个单一的提交中。
最后,你可能需要使用git push --force-with-lease命令强制推送你的分支,因为提交历史已经被重写。