【这些git命令你都会吗】只会用图形化界面?

git常用命令

仓库

bash 复制代码
# 在当前目录新建一个Git代码库
git init

# 新建一个目录,将其初始化为Git代码库
git init [project-name]

# 下载一个项目和它的整个代码历史
git clone [url]

# 添加仓库地址
git remote add origin 仓库地址

# 更换仓库地址
git remote set-url origin 仓库地址

配置

bash 复制代码
# 显示当前的Git配置
git config --list

# 编辑Git配置文件
git config -e [--global]

# 设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

增加/删除文件

bash 复制代码
# 添加指定文件到暂存区
git add [file1] [file2] ...

# 添加指定目录到暂存区,包括子目录
git add [dir]

# 添加当前目录的所有文件到暂存区
git add .

# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
git add -p

# 删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2] ...

# 停止追踪指定文件,但该文件会保留在工作区
git rm --cached [file]

# 改名文件,并且将这个改名放入暂存区
git mv [file-original] [file-renamed]

代码提交

bash 复制代码
# 提交暂存区到仓库区
git commit -m [message]

# 提交暂存区的指定文件到仓库区
git commit [file1] [file2] ... -m [message]

# 提交工作区自上次commit之后的变化,直接到仓库区
git commit -a

# 提交时显示所有diff信息
git commit -v

# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
git commit --amend -m [message]

# 重做上一次commit,并包括指定文件的新变化
git commit --amend [file1] [file2] ...

分支

bash 复制代码
# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 列出所有本地分支和远程分支
git branch -a

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 新建一个分支,指向指定commit
git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
git checkout [branch-name]

# 切换到上一个分支
git checkout -

# 建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
git merge [branch]

# 选择一个commit,合并进当前分支
git cherry-pick [commit]

# 删除分支
git branch -d [branch-name]

# 删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]

标签

bash 复制代码
# 列出所有tag
git tag

# 新建一个tag在当前commit
git tag [tag]

# 新建一个tag在指定commit
git tag [tag] [commit]

# 删除本地tag
git tag -d [tag]

# 删除远程tag
git push origin :refs/tags/[tagName]

# 查看tag信息
git show [tag]

# 提交指定tag
git push [remote] [tag]

# 提交所有tag
git push [remote] --tags

# 新建一个分支,指向某个tag
git checkout -b [branch] [tag]

查看信息

bash 复制代码
# 显示有变更的文件
git status

# 显示当前分支的版本历史
git log

# 显示commit历史,以及每次commit发生变更的文件
git log --stat

# 搜索提交历史,根据关键词
git log -S [keyword]

# 显示某个commit之后的所有变动,每个commit占据一行
git log [tag] HEAD --pretty=format:%s

# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
git log [tag] HEAD --grep feature

# 显示某个文件的版本历史,包括文件改名
git log --follow [file]
git whatchanged [file]

# 显示指定文件相关的每一次diff
git log -p [file]

# 显示过去5次提交
git log -5 --pretty --oneline

# 显示所有提交过的用户,按提交次数排序
git shortlog -sn

# 显示指定文件是什么人在什么时间修改过
git blame [file]

# 显示暂存区和工作区的差异
git diff

# 显示暂存区和上一个commit的差异
git diff --cached [file]

# 显示工作区与当前分支最新commit之间的差异
git diff HEAD

# 显示两次提交之间的差异
git diff [first-branch]...[second-branch]

# 显示今天你写了多少行代码
git diff --shortstat "@{0 day ago}"

# 显示某次提交的元数据和内容变化
git show [commit]

# 显示某次提交发生变化的文件
git show --name-only [commit]

# 显示某次提交时,某个文件的内容
git show [commit]:[filename]

# 显示当前分支的最近几次提交
git reflog

远程同步

bash 复制代码
# 下载远程仓库的所有变动
git fetch [remote]

# 显示所有远程仓库
git remote -v

# 显示某个远程仓库的信息
git remote show [remote]

# 增加一个新的远程仓库,并命名
git remote add [shortname] [url]

# 取回远程仓库的变化,并与本地分支合并
git pull [remote] [branch]

# 上传本地指定分支到远程仓库
git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突
git push [remote] --force

# 推送所有分支到远程仓库
git push [remote] --all

# 远程提交历史记录对不上导致报错  Git报错-refusing to merge unrelated histories
git pull origin master --allow-unrelated-histories

撤销

bash 复制代码
# 恢复暂存区的指定文件到工作区
git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区
git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区
git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致
git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git reset --keep [commit]

# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
git revert [commit]

暂时将未提交的变化移除,稍后再移入
git stash
git stash pop

其他

bash 复制代码
# 生成一个可供发布的压缩包
git archive

git stash详解

什么?居然还有人不知道 git stash,这么好用的东西还有人不会,我不允许!!!

介绍

git 是日常开发中版本控制必不可少的工具,当遇到代码重构或者临时恢复时,git stash 的隐藏功能非常好用,其主要应用于下述场景:

上线功能开发中需要切换分支或者切回老版本,但是不想 commit 和丢弃当前改动,执行 git stash 功能会将当前改动存储至后台,当需要恢复时,执行 git stash pop 即可,可以理解为一个保存栈。

git stash

将当前的改动保存下来,默认保存是没有标识的。

bash 复制代码
git stash

git stash save $info

$info 填写备注标识,这样就可以明确的知道每次隐藏的是什么内容。

bash 复制代码
git stash save '更改了用户信息'

git stash list

查看所有隐藏的记录

bash 复制代码
git stash list

列举如下:

git stash pop

弹出最新 stash 的内容,并删除该 stash,类似于栈的 pop 即弹出并删除

bash 复制代码
# 取出最新的一条
git stash pop
# 也可以根据编号来弹出
git stash pop 1

git stash apply

弹出最新 stash 的内容,和pop不同的是它不会删除该 stash

bash 复制代码
# 取出最新的一条
git stash apply
# 也可以根据编号来弹出
git stash apply 1

git stash show

显示当前最新 stash 的改动,主要是恢复 stash 前可以看到修改内容,如果忘了 stash 了什么内容可以使用

bash 复制代码
# 查看最新的一条改动
git stash show -p
# 查看指定的某条改动
git stash show 1 -p

git stash drop

删除 stash 记录

bash 复制代码
# 删除最新的一条改动
git stash drop
# 删除指定的某条改动
git stash drop 1

git stash clear

删除所有 stash 记录

bash 复制代码
git stash clear

友情提示

  • 使用 git stash 必须先进行 git add 操作
  • 如果使用git stash有冲突, git stash pop 之后的那条记录还是会存在

git 撤销详解

暂存区撤销

场景:当我们执行了git add之后想要撤销

bash 复制代码
# 查看暂存区
git status
# 撤销提交到暂存区的指定文件
git reset [file_name]
# 撤销提交到暂存区的所有文件
git reset .

commit 撤销

场景:当我们执行了git commit之后想要撤销

mixed

--mixedgit reset的默认值

bash 复制代码
# 撤销到指定的commit,会将当前git add提交状态的文件恢复到未提交之前的状态,保留修改的文件内容
git reset [commit_id]

soft

撤销到指定commit并保留之前的更改

bash 复制代码
# 查看 commit 记录
git log
# 撤销到指定的commit,和mixed不同的是,不会改变暂存区的内容,保留修改的文件内容
git reset --soft [commit_id]

hard(谨慎使用)

撤销到指定commit并但不保留之前的更改,也就是说一旦撤销之前修改的内容就会消失,

可以在进行版本回退时使用

bash 复制代码
# 查看 commit 记录
git log
# 撤销到指定的commit,不保留之前的更改
git reset --hard [commit_id]

使用HEAD可以替换掉上面的[commit_id]

如:

bash 复制代码
# 撤销到上一个版本
git reset --soft HEAD~1

HEAD 表示当前版本

  • HEAD^ 上一个版本

  • HEAD^^ 上上一个版本

  • HEAD^^^ 上上上一个版本

  • 以此类推...

可以使用 ~数字表示

  • HEAD~0 表示当前版本

  • HEAD~1 上一个版本

  • HEAD~2 上上一个版本

  • HEAD~3 上上上一个版本

  • 以此类推...

撤销远程并推送

使用了上面的命令进行了撤销之后,我们需要把远程的push也进行撤销,这个时候可以执行

如下命令:

bash 复制代码
git push -f
  • 本地撤销之后,push之前不需要进行pull,不然远程的会将本次撤销进行覆盖
  • push -fpush --force 的简写形式,意思是强制推送(force push)
  • 撤销之后,其他同事如果之前git pull过你的这次提交记录,那么他需要执行 git reset --hard origin/分支名将本地分支重置为与远程分支相同的状态,包括分支指针的位置和提交记录。

tag 标签详解

查看

bash 复制代码
# 列出所有tag
git tag
# 查看指定tag信息
git show [tag_name]

创建

bash 复制代码
# 基于指定的commit创建tag
git tag [tag_name] [commit_id]
# 基于指定的commit创建tag,并进行备注
git tag [tag_name] [commit_id] -m [message]

提交

bash 复制代码
# 将tag提交到远程仓库
git push origin [tag_name]
# 将所有tag提交到远程仓库
git push origin --tags

删除

bash 复制代码
# 删除本地tag
git tag -d [tag_name]
# 删除远程tag
git push origin :refs/tags/[tag_name]
# 另一种更直观的删除远程tag
git push origin --delete [tag_name]

tag和分支是相互独立的,删除了tag并不影响分支。

切换

bash 复制代码
# 切换到指定tag
git checkout [tag_name]

重命名

bash 复制代码
# 重命名tag
git tag -a [new_tag_name] [old_tag_name]
相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅4 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
李少兄4 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端