Git常用命令及常见问题解决
Git
目录
Git相关知识点
仓库
- Remote:远程主仓库
- Repository/History:本地仓库
- Stage/Index:Git追踪树,暂存区
- Workspace:本地工作区
Git问题解决
一般代码提交流程:工作区→git status
查看状态→git add .
将所有修改加入暂存区→git commit -m "提交描述"
将代码提交到本地仓库→git push
将本地仓库代码更新到远程仓库
git add提交到暂存区问题
场景1
当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
#丢弃工作区的修改
git checkout --<文件名>
场景2
当你不但改乱了工作区某个文件的内容,还添加到了暂存区,想丢弃修改,分两步
第一步
git reset HEAD file
#回到场景1
第二步按场景1操作
git commit提交到本地仓库问题
1、提交信息出错
更改commit信息
git commit --amend -m "新提交信息"
2、漏提交
commit时,遗漏提交部分更新,两种解决方案
- 方案一:再次提交
git commit -m "提交信息"
#此时,git上会出现两次commit
3、提交错误文件,回退到上一个commit版本,再commit
git reset
删除指定的commit
修改版本库,修改暂存区,修改工作区
#把暂存区的修改车削掉(unstage),重新放回工作区
git reset HEAD <文件名>
#git版本回退,回退到特定的commit_id版本,可以通过git log查看提交历史,以便确定要回退到哪个版本
git reset --hard commit_id
#将版本回退一个版本,不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码
#也回退到这个版本
git reset --hard HEAD-1
修改版本库,保留暂存区,保留工作区
#将版本库软回退1个版本,软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到
#暂存区
git reset --soft HEAD-1
git revert
撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
git revert
是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容
#撤销前一次commit
git revert HEAD
#撤销前前一次commit
git revert HEAD^
#撤销指定的版本,撤销也会作为一次提交进行保存
git revert commit_id
'git revert'和'git reset'的区别
git revert
是用一次新的commit来回滚之前的commit,git reset
是直接删除指定的commit- 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为
git revert
是用上一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset
是之前把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。 git reset
是吧HEAD向后移动了一下,而git revert
是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
常用命令
1、初始开发git操作流程
- 本地初始化一个仓库,设置远程仓库地址后再做push
#初始化本地仓库
git init
#远程仓库建立连接
git remote add origin 远程仓库地址
#拉取
git pull origin master
#提交
git add .
git commit -m '提交信息'
git push origin master
- 克隆最新主分支项目代码
git clone 地址
- 创建本地分支
git branch 分支名
- 查看本地分支
git branch
- 查看远程分支
git branch -a
- 切换分支
#一般修改未提交则无法切换,大小写问题经常会有
git checkout 分支名
#强制切换,非必须慎用
git checkout 分支名 -f
- 将本地分支推送到远程分支
git push <远程仓库> <本地分支>:<远程分支>
2、git fetch
将某个远程主机的更新,全部/分支取回本地(此时只更新了Repository)他取回的代码对本地的开发代码没有影响
3、git pull
拉取远程主机某分支的更新,再与本地的指定分支合并(相当与fetch加上了合并分支功能的操作)
4、git push
将本地分支的更新,推送到远程主机,其命令格式与
git pull
相似
5、分支操作
#下载指定分支
git clone -b 分支名仓库地址
#拉取远程新分支
git checkout -b serverfix origin/serverfix
#合并本地分支 将hotfix分支合并到当前分支
git merge hotfix
#合并远程分支
git merge origin/serverfix
#删除本地分支
git branch -d hotfix
#删除远程分支
git push origin --delete serverfix
#上传新命名的本地分支
git push origin newName
#创建新分支 创建名为branchName的本地分支
git branch branchName
#切换到新分支
git checkout branchName
#创建并切换分支 相当于以上两条命令的合并
git checkout -b branchName
#查看本地分支
git branch
#查看远程仓库所有分支
git branch -a
#本地分支重命名
git branch -m oldName newName
#把修改后的本地分支与远程分支关联
git branch --set-upstream-to origin/newName
6、Git tag相关操作
#查看标签,可加上参数-l(列表形式列出)-n(附加说明)
git tag [-l -n]
#查看符合检索条件的标签
git tag -l 1.*.*
#查看对应标签状态
git checkout 1.0.0
#创建本地标签
git tag 1.0.0
#创建带备注标签
git tag -a 1.0.0 -m '这是备注信息'
#针对特定commit版本SHA创建标签
git tag -a 1.0.0 0c3b62d -m '这是备注信息'
#删除本地标签
git tag -d 1.0.0
#将本地所有标签发布到远程仓库
git push origin --tags
#指定版本发布到远程仓库
git push origin 1.0.0
#删除远程仓库对应标签(Git版本>v1.7.0)
git push origin --delete 1.0.0
#获取远程标签
git fetch origin tag "标签名称"
7、查看信息
#显示有变更的文件
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
8、撤销
#恢复暂存区的指定文件到工作区
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了