searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Git命令总结

2023-07-24 07:36:29
9
0

      相信大家都用上了国产化系统,在Linux系统上,没有比较好用的Git Gui客户端确实造成提交和修改效率低下。git命令比较多,很多时候只熟记常用的几个,但遇到问题时候都是用到不熟悉的命令,那么我在这里总结一下Git的各个命令用途和用法,希望你看完这篇文章后可以提高在Linux系统上提交和修改git的效率。

git init - 初始化一个Git仓库
# 在当前目录初始化一个Git仓库
git init
 
git add - 添加文件到暂存区
# 添加filename文件到暂存区
git add filename
 
git commit -m "message" - 提交更新,带提交注释
# 提交更新,注释为"完成首页UI"
git commit -m "完成首页UI"
 
git status - 查看仓库当前状态
# 查看新增、修改、删除等变更情况
git status

# 查看具体文件修改的内容差异
git status -v //显示工作区和暂存区文件的变更详情

# 显示忽略文件的概览
git status --ignored //显示被忽略文件的概览

# 显示未跟踪文件概览
git status --untracked-files=all //显示所有未跟踪文件的概览

# 显示简洁版本状态
git status -s //以简洁方式显示工作区和暂存区文件的状态
 
git diff - 比较工作目录和暂存区的不同
# 比较工作区和暂存区差异
git diff    // 比较工作区和暂存区文件的差异

# 比较两次提交之间的差异
git diff commit1 commit2 // 比较commit1和commit2两次提交之间的差异

# 比较某次提交和工作区的差异
git diff commit // 比较给定提交和工作区的差异

# 比较两个分支
git diff branch1 branch2 // 比较branch1和branch2分支之间的差异

# 仅显示统计信息,不显示文件内容差异
git diff --stat // 仅显示统计信息,而不显示文件内容的DIFF
 
git log - 查看提交日志
# 按提交次数限制显示日志
git log -n 5 // 显示最近5次的提交日志

# 按日期范围过滤日志
git log --since=2022-06-01 --until=2022-06-30 // 显示2022年6月1日到6月30日期范围的提交日志

# 按作者过滤日志
git log --author="张三" // 只显示张三的提交日志

# 按关键词过滤日志
git log -S"函数名" // 显示修改过"函数名"函数的提交日志

# 显示简略的统计信息
git log --stat //显示每次提交的简略修改统计信息
 
git reset --hard commit_id - 回退到指定commit_id版本
# 回退到a5f4a0d版本
git reset --hard a5f4a0d
 
git checkout branchname - 切换分支
# 切换到develop分支
git checkout develop
 
git merge branchname - 合并分支到当前分支
# 将feature/login分支合并到当前分支
git merge feature/login
 
git branch - 查看所有分支
# 列出所有本地分支
git branch //列出所有本地分支

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

# 基于当前分支创建新的分支
git branch new-feature //基于当前分支创建new-feature分支

# 基于指定提交创建分支
git branch new-branch HEAD~5 //基于HEAD的第5个父提交创建分支

# 重命名当前分支
git branch -m new-name //重命名当前分支为new-name
 
git remote add origin url - 关联远程仓库
# 关联远程仓库origin
git remote add origin https://github.com/user/repo.git

# 查看当前远程仓库
git remote -v

# 修改远程仓库的URL
git remote set-url origin https://github.com/user/newrepo.git

# 添加新的远程仓库upstream
git remote add upstream https://github.com/user/forkedrepo.git

# 删除远程仓库origin
git remote rm origin
 
git push origin master - 推送master分支到远程仓库
# 推送本地master分支到origin远程仓库
git push origin master
 
git clone url - 克隆远程仓库
# 克隆远程仓库到本地
git clone https://github.com/user/repo.git

# 克隆指定分支
git clone -b branch https://github.com/user/repo.git

# 克隆指定标签
git clone --branch tag v1.0 https://github.com/user/repo.git

# 浅克隆仓库,不包括所有提交记录
git clone --depth 1 https://github.com/user/repo.git

# 镜像推送克隆仓库
git clone --mirror https://github.com/user/repo.git
 
git pull - 拉取远程仓库最新版本到本地
# 拉取远程master分支到本地当前分支
git pull origin master

# 拉取标签v1.0的代码到当前分支
git pull origin v1.0

# 反向合并远程分支到当前分支
git pull --rebase origin feature

# 拉取并自动合并或衍合所有远程追踪分支
git pull --all

# 拉取并自动处理冲突的合并
git pull -Xtheirs origin
 
git stash - 暂存当前工作目录的改动
# 暂存当前工作目录的改动
git stash

# 查看stash列表
git stash list // 列出所有stash的改动记录

# 恢复指定的stash内容
git stash apply stash@{2} // 恢复编号为2的stash内容

# 删除指定的stash
git stash drop stash@{3} // 删除编号为3的stash
 
git stash pop - 恢复暂存的改动
# 恢复最近一次stash
git stash pop

# 恢复指定的stash
git stash pop stash@{2}

# 恢复并删除此stash
git stash pop --index

# 恢复stash时保留压入的stash
git stash apply stash@{1}

# 删除最后一个stash
git stash drop
 
git rebase - 变基操作,合并分支时保持线性提交历史
# 将当前分支rebase到master
git rebase master

# 交互式rebase编辑历史提交
git rebase -i HEAD~5

# 跳过rebase中的某个提交
git rebase --skip

# 中止当前rebase过程
git rebase --abort

# 处理rebase过程中的冲突后继续
git rebase --continue
 
git tag - 添加标签
# 给最近一次提交加标签
git tag v1.0

# 给指定提交的hash加标签
git tag v1.0 9fceb02

# 创建带注释的标签
git tag -a v1.0 -m "version 1.0"

# 查看所有标签
git tag

# 查看标签详细信息
git show v1.0
 
git fetch - 获取远程仓库最新版本到本地
# 从远程获取最新版本到本地
git fetch origin

# 获取远程分支到本地
git fetch origin dev

# 获取远程仓库的所有分支
git fetch --all

# 获取远程仓库的标签
git fetch --tags

# 获取远程上游仓库分支
git fetch upstream
 
git cherry-pick commit_id - 拣选合并某个指定的提交到当前分支
# 合并提交号为a7683de的提交到当前分支
git cherry-pick a7683de 

# 合并一个范围的提交
git cherry-pick 160e1260..160e1279

# 合并并自动处理冲突
git cherry-pick -X theirs 160e1279

# 放弃正在进行的cherry-pick
git cherry-pick --abort

# 继续处理冲突后的cherry-pick
git cherry-pick --continue
 
git bisect - 通过二分查找定位引入bug的提交
# 开始bisect过程查找引入bug的提交
git bisect start

# 标记当前提交为好的提交
git bisect good [commit]

# 标记当前提交为坏的提交
git bisect bad [commit]

# 跳过对某次提交的测试
git bisect skip

# 结束bisect并返回到开始检出的地方
git bisect reset
 
git reflog - 查看所有分支顶端的操作记录
# 查看所有分支HEAD指针运动的操作历史
git reflog

# 查看某一分支的引用日志
git reflog master // 显示master分支HEAD的历史记录

# 查看最近5条引用日志
git reflog -5 // 显示最近5条引用日志记录

# 查找删除分支的提交号
git reflog --all | grep 'delete branch' // 查找删除分支的提交记录

# 查看reset命令的提交号
git reflog --all | grep 'reset' // 查找reset命令操作的提交记录
 
git rm --cached filename - 从暂存区移除文件但保留在工作目录
# 移除config.txt的跟踪但不删除文件
git rm --cached config.txt

# 从版本控制中删除文件
git rm filename

# 递归删除整个目录
git rm -r folder/

# 从暂存区删除但保留文件在工作区
git rm --cached filename

# 强制删除文件或目录
git rm -f filename

# 删除glob模式匹配的文件
git rm log/*.log
 
git revert commit_id - 撤销指定的提交
# 撤销指定的提交
git revert b434dc7

# 撤销最新的一次提交
git revert HEAD

# 撤销指定的提交范围
git revert HEAD~3..HEAD

# 在revert时创建新的提交
git revert -n b434dc7

# 放弃进行中的revert操作
git revert --abort
 
git archive - 将git仓库打包成zip或tar文件
# 导出指定分支的整个仓库为zip文件
git archive --format=zip HEAD -o repo.zip

# 导出某个目录为tar文件
git archive --output=folder.tar HEAD:folder

# 导出指定commit区间的diff为tar文件
git archive --format=tar commit1..commit2 > diff.tar

# 导出最后一次提交的文件快照为zip文件
git archive @ -o snapshot.zip HEAD

# 导出仓库打包时过滤指定文件
git archive --format=zip HEAD --exclude="*.log"
0条评论
0 / 1000