Git | 详解 | 命令
更好的观感:
https://wyqz.top/p/1843856130.html
Git | 详解 | 命令
概念
Git是基于树进行维护的,每一个节点都是一个历史版本,可以进行代码管理。
工作区(Workspace)
暂存区(Index / Stage)
本地仓库(Repository)
远程仓库(Remote)
配置
Git的设置文件为.gitconfig
,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。
git config --list
: 显示当前的Git配置
git config -e [--global]
: 编辑Git配置文件
git config [--global] user.name xxx
:设置全局用户名,信息记录在~/.gitconfig
文件中
git config [--global] user.email xxx@xxx.com
:设置全局邮箱地址,信息记录在~/.gitconfig
文件中
git init
:将当前目录配置成git仓库,信息记录在隐藏的.git
文件夹中
工作区
git status
:显示有变更的文件
git restore XXX
: 将工作区的XXX文件的修改(该修改未添加到暂存区)恢复
git add XX
:将XX文件的 修改信息 添加到暂存区
git add .
:将当前工作区的所有文件的修改信息加入暂存区
git rm [file1] [file2] ...
: 删除工作区文件,并把这次删除加入到暂存区
git diff XX
:查看XX文件相对于暂存区修改了哪些内容
git checkout — XX
或git restore XX
:将XX文件尚未加入暂存区的修改全部撤销
更多撤销操作见下文 【撤销回退】
暂存区
git rm --cached XX
:将文件XX从暂存区中删掉,停止追踪指定文件,但该文件会保留在工作区
git restore --staged XXX
: 将暂存区的XXX清空,工作区不变
git commit -m "给自己看的备注信息"
:将暂存区的内容提交到当前分支(可持久化)
git checkout [file]
: 恢复暂存区的指定文件到工作区(工作区文件发生改变)
git reset [file]
: 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
更多撤销操作见下文 【撤销回退】
分支
- 查看分支
git branch
: 查看本地分支
git branch -r
: 列出所有远程分支
git branch -a
: 列出所有本地分支和远程分支
- 删除分支
git branch -d branch_name
:删除本地的branch_name分支
git push origin --delete [branch-name]
: 删除远程分支
- 切换分支
git checkout branch_name
:切换到branch_name这个分支
git checkout -b branch_name
:创建并切换到branch_name这个分支
本地分支
git branch
: 列出所有本地分支
git branch branch_name
:创建新分支
git checkout branch_name
:切换到branch_name这个分支,并更新工作区
git checkout -b branch_name
:创建并切换到branch_name这个分支
git branch -m oldBranchName newBranchName
: 修改本地分支名字
git merge branch_name
:将分支branch_name合并到当前分支上
git checkout -
: 切换到上一个分支
git cherry-pick [commit]
: 选择一个commit,合并进当前分支
git branch -d branch_name
:删除本地仓库的branch_name分支
远程分支
git branch -r
: 列出所有远程分支
git branch [branch-name]
: 新建一个分支,但依然停留在当前分支
git checkout -b [branch]
: 新建一个分支,并切换到该分支
git branch [branch] [commit]
: 新建一个分支,指向指定commit
git push origin --delete [branch-name]
: 删除远程分支
git branch -dr [remote/branch]
: 删除远程分支
本地和远程
git branch -a
: 列出所有本地分支和远程分支
git branch --track [branch] [remote-branch]
: 新建一个分支,与指定的远程分支建立追踪关系
git branch --set-upstream [branch] [remote-branch]
: 建立追踪关系,在现有分支与指定的远程分支之间
git branch --set-upstream-to=origin/branch_name1 branch_name2
:将远程的branch_name1分支与本地的branch_name2分支对应
信息查看
git log
:查看当前分支的所有版本
git reflog
:查看HEAD指针的移动历史(包括被回滚的版本)
git status
: 显示有变更的文件
git log --stat
: 显示commit历史,以及每次commit发生变更的文件
git log -S [keyword]
: 搜索提交历史,根据关键词
git log [tag] HEAD --pretty=format:%s
: 显示某个commit之后的所有变动,每个commit占据一行
git log [tag] HEAD --grep feature
: 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
git log --follow [file]
: 显示某个文件的版本历史,包括文件改名
git whatchanged [file]
: 显示某个文件的版本历史,包括文件改名
git log -p [file]
: 显示指定文件相关的每一次diff
git log -5 --pretty --oneline
: 显示过去5次提交
git shortlog -sn
: 显示所有提交过的用户,按提交次数排序
git blame [file]
: 显示指定文件是什么人在什么时间修改过
git diff
: 显示暂存区和工作区的差异
git diff --cached [file]
: 显示暂存区和上一个commit的差异
git diff HEAD
: 显示工作区与当前分支最新commit之间的差异
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 remote add origin git@git.acwing.com:xxx/XXX.git
:将本地仓库关联到远程仓库
git push -u
(第一次需要-u以后不需要):将当前分支推送到远程仓库
git push origin branch_name
:将本地的某个分支推送到远程仓库
git clone git@git.acwing.com:xxx/XXX.git
:将远程仓库XXX下载到当前目录下
git pull
:将远程仓库的当前分支与本地仓库的当前分支合并
git pull origin branch_name
:将远程仓库的branch_name分支与本地仓库的当前分支合并
git push --set-upstream origin branch_name
:设置本地的branch_name分支对应远程仓库的branch_name分支
git push -d origin branch_name
:删除远程仓库的branch_name分支
git checkout -t origin/branch_name
: 将远程的branch_name分支拉取到本地
撤销回退
git reset --hard
: 重置暂存区与工作区,与上一次commit保持一致
git reset --hard HEAD^
或 git reset --hard HEAD~
:将代码库回滚到上一个版本
git reset --hard HEAD^^
:往上回滚两次,以此类推
git reset --hard HEAD~100
:往上回滚100个版本
git reset --hard 版本号
:回滚到某一特定版本
git stash
:将工作区和暂存区中尚未提交的修改存入栈中
git stash apply
:将栈顶存储的修改恢复到当前分支,但不删除栈顶元素
git stash drop
:删除栈顶存储的修改
git stash pop
:将栈顶存储的修改恢复到当前分支,同时删除栈顶元素
git stash list
:查看栈中所有元素
git checkout [file]
: 恢复暂存区的指定文件到工作区
git checkout [commit] [file]
: 恢复某个commit的指定文件到暂存区和工作区
git checkout .
: 恢复暂存区的所有文件到工作区
git reset [file]
: 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
git reset [commit]
: 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
git reset --hard [commit]
: 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --keep [commit]
: 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git revert [commit]
: 新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
git reset --hard [commit]
: 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
git reset --keep [commit]
: 重置当前HEAD为指定commit,但保持暂存区和工作区不变
git revert [commit]
: 新建一个commit,用来撤销指定commit,后者的所有变化都将被前者抵消,并且应用到当前分支
序列化操作
1 基础上传操作
git add .
git commit -m "备注信息"
git push
2 新建仓库的初始化操作
- 远程新建仓库,默认不添加
README.md
文件 - 此时请注意远程仓库的主分支名为
main
还是master
- 本地新建一个文件夹用来作为上传该远程仓库的文件(或者用已存在的文件夹也行),在该目录下使用
git init
命令初始化仓库 - 将本地仓库主分支名字设为和远端一样,例如
git branch -M main
- 关联远程仓库,例如
git remote add origin https://github.com/anda522/bot.git
- 上传的操作:
git add .
,git commit -m "提交代码的备注信息"
,git push
3 新建dev分支并上传
git checkout -b dev # 本地新建一个dev分支,并且切换到dev分支
git push --set-upstream origin dev # 本地在dev分支;需要上传在dev分支的操作;默认远端没有dev分支,远端将创建一个dev分支并进行push操作
4 删除久远的未被追踪的分支
有时候分支已经从远程分支中删除,但是本地分支并不知道当前这几个远程分支是否被删除,可以使用git remote show origin
命令查看
git remote show origin # 会出现stale (use 'git remote prune' to remove)字样
# git branch -a 这个可以看到远程不存在的分支还能显示出来
git remote prune origin # 删除未被追踪的分支
5 打tag
- 以本地最后一个
commit
创建tag
git tag <tagName> # 基于本地最后一个commit创建一个tag
git push origin <tagName> # 将tag推送到远程仓库
git push origin --tags # 将所有tag推送到远程仓库
- 以特定的提交为tag
git log --pretty=oneline # 查看当前分支的提交历史 里面包含 commit id
git tag -a <tagName> <commitId>
- 查看信息
git show <tagName> # 查看tag的详细信息
git tag # 查看本地所有tag
git ls-remote --tag origin # 查看远程tag
- 删除tag
git tag -d <tagName> # 删除本地tag
git push origin :refs/tags/<tagName> # 删除远程tag
- 其他
git tag -a <tagname> -m "XXX..." # 指定标签信息
git tag -a v1.0 -m "release 0.1.0 version" # 创建附注标签
git checkout [tagname] # 切换标签
6 git fetch和git pull
git fetch
:将远程更新信息全部取回本地
git fetch <远程主机名> //这个命令将某个远程主机的更新全部取回本地
如果只想取回特定分支,可以指定分支名
git fetch <远程主机名> <分支名> //注意之间有空格
常见命令:
取回origin
主机的master
分支:
git fetch origin master
取回更新后会返回一个FETCH_HEAD
,指的是某个branch在服务器上的最新状态,我们可以在本地通过它查看刚取回的更新信息:
git log -p FETCH_HEAD
可以看到返回的信息包括更新的文件名,更新的作者和时间,以及更新的代码。我们可以通过这些信息来判断是否产生冲突,以确定是否将更新merge到当前分支。
git pull
:拉取并合并
可以理解为两个过程:
git fetch origin master //从远程主机的master分支拉取最新内容
git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中
完整命令:将远程主机的某个分支的更新取回,并与本地指定的分支合并
git pull <远程主机名> <远程分支名>:<本地分支名>
如果是与当前分支合并,则冒号后面的可以省略,例如:
git pull origin master
Git | 详解 | 命令相关推荐
- 删除隐藏版本信息 版本回退_Git系列之-分布式版本控制Git详解
课程简介: 课程目标:通过本课程的学习,将全面掌握Git版本管理工具的配置与使用,以适应工作的需要. 适用人群:具有一定开发基础的开发人员. 课程概述:Git (读音为/gɪt/)是一个开源的分布式版 ...
- Git详解(2)——Git基础
文章转载自:http://www.open-open.com/lib/view/open1328069733264.html 版权归原作者. 读完本章你就能上手使用 Git 了.本章将介绍几个最基本的 ...
- Git详解(1)——Git起步
文章转载自:http://www.open-open.com/lib/view/open1328069609436.html 版权归原作者. 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版 ...
- Git详解之必知点----Git、本地仓库、远程仓库、IDEA集成Git
Git详解之必知点 1.Git介绍 1.1版本控制(理解) 1.2开发中存在的问题(理解) 1.3SVN版本控制(理解) 1.4Git版本控制(理解) 2.Git下载和安装 2.1Git的安装(应用) ...
- Git详解之四 服务器上的Git
Git详解之四 服务器上的Git 服务器上的 Git 到目前为止,你应该已经学会了使用 Git来完成日常工作.然而,如果想与他人合作,还需要一个远程的 Git仓库.尽管技术上可以从个人的仓库里推送和拉 ...
- Git详解之六 Git工具
Git详解之六 Git工具 Git工具 现在,你已经学习了管理或者维护 Git仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支 ...
- Git详解之七 自定义Git
Git详解之七 自定义Git 自定义 Git 到目前为止,我阐述了 Git基本的运作机制和使用方式,介绍了 Git提供的许多工具来帮助你简单且有效地使用它.在本章,我将会介绍 Git的一些重要的配置方 ...
- Git详解与gitlab使用
Git详解与gitlab使用 大牙啊 关注 0人评论 21798人阅读 2018-03-21 15:20:32 gitlab 第1章 版本控制系统都能干什么? 自动生成备份 知道改动的地方 随时回滚 ...
- Git详解之二:Git基础
Git详解之二:Git基础 2012/08/24 | 分类: IT技术, 书籍与教程 | 0 条评论 | 来源: <PRO GIT> | 标签: GIT, PRO GIT, 版本控 ...
最新文章
- 第三课.使用简单的NN模拟fizzbuzz
- Qt学习之路_1(安装及首次体验)
- linux 设备驱动 百度,Linux设备驱动之input子系统
- 如何使用阿里云容器服务保障容器的内存资源质量
- 一个古帝国做产品的故事
- java table修改指定行_(变强、变秃)Java从零开始之JQuery购物车功能实操
- 前端开发API及规范
- Tapable.plugin is deprecated. Use new API on `.hooks` instead
- Go语言学习Day03
- 剑指offer面试题68 - I. 二叉搜索树的最近公共祖先(递归)(二叉搜索树)
- android c博客园,android上进行c/C 开发测试(转) - 奋进 - 博客园
- 专业人士对《程序员修炼之道》的赞誉
- nginx配置跨域对服务异常(包括404)时失效的解决
- 计算机四级网络工程师笔记
- 大学生计算机水平怎么提高,大学生如何提高计算机能力
- DNX SDK版本 “dnx-clr-win-x86.1.0.0-beta5”无法安装
- 杜骡的前端面试题(大全)
- java购物车的实现并发控制_购物车的实现原理
- 阿里云对腾讯企业邮箱设置域名解析
- Window API ShowWindow