文章目录
- git常用命令总结
- 1、查看git常用命令
- 2、创建仓库(初始化一个仓库)
- 3、克隆/获取远程仓库
- 4、Git配置操作
- 5、添加文件到暂存区(追踪文件)
- 6、提交文件到本地仓库
- 7、查看修改历史
- 8、查看日志信息(查看提交历史)
- 9、比较文件不同
- 10、清除操作
- 11、打开图形化工具
- 12、删除文件
- 13、回退操作
- 14、移动/重命名工作区文件
- 15、标签
- 16、分支
- 17、仓库迁移
- 18、编辑操作
- 19、查看仓库状态
- 20、查看对象信息
- 21、远程操作
- 22、储藏更改
- 23、撤销修改
- 问题排查
- 运行垃圾回收功能
git helper -a # 查看全部git子命令
创建一个空文件夹gitTest,打开命令行,输入如下命令
git init
此时,如果这个文件夹就作为仓库使用了,在这个文件夹中有一个隐藏文件夹.git
,该目录包含了资源的所有元数据,其他的项目目录保持不变。
或者让指定文件夹成为仓库,使用如下命令
git init 文件夹名称
git clone <repo> # 从远程仓库克隆代码
git clone -b 分支名 地址 # 克隆分支代码到本地
git clone <repo> <directory># 将代码内容克隆到指定目录
参数:
repo :仓库地址
directory:本地目录
例如:
git clone git://github.com/schacon/grit.git
git clone git://github.com/schacon/grit.git mygrit # 克隆到指定本地目录
# 不同协议的仓库地址
git clone http://github.com/CosmosHua/locate new --HTTP协议
git clone git://github.com/CosmosHua/locate new --GIT协议
git clone https://github.com/fsliurujie/test.git --HTTPS协议
git的配置使用git config xxx
命令,常见的命令有
(1)显示当前git配置信息
git config --list
结果可能如下
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
(2)编辑配置文件
git config -e # 针对当前仓库
git config -e --global # 针对系统上所有仓库
(3)设置提交代码时的用户信息(全局)
git config --global user.name xxx
git config --global user.email xxx
(4)删除提交代码时的用户信息(全局)
git config --global --unset user.name xxx
git config --global --unset user.email xxx
(5)增加提交代码时的用户信息(全局)
git config --global --add user.name xxx
git config --global --add user.email xxx
(6)查找提交代码时的用户信息(全局)
git config --global user.name
git config --global user.email
(7)给命令设置别名
# 将commit命令设置别名ci git commit命令将由git ci来代替
git config --global alias.ci commit
(8)设置存储凭证
在输入一次密码后,后续就可以不再输入密码进行操作了
git config --global credential.helper wincred
(9)设置/修改/当前仓库提交的用户信息
git config user.name = xxx
git config user.email = xxx
添加文件到暂存区
# 添加指定文件到暂存区
git add 文件名
# 提交多个文件到暂存区
git add 文件1,文件2
# 将所有文件提交到暂存区
git add .
# 一个文件分多次提交
git add -p 文件名
# 打开交互式子系统
git add -i
执行完git add -i之后,可以看到有如下选项
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
1、status功能上和git add -i类似,没啥用
2、update 看下面介绍
3、revert :把已经添加到暂存区的文件从暂存区删除
4、add untracked :把新增的文件添加到暂存区
5、patch:看下面介绍
6、diff:比较暂存区文件和本地版本库的差异
7、quit:退出子命令系统
8、help:查看帮助信息
patch模式介绍
选择patch模式之后,git会显示这些文件的当前内容和本地版本库中的差异,然后可以自己决定是否添加这些修改到暂存区,通过输入y,n,q,a,d,/,?
其中一项选择操作方式
y:接收修改
n:忽略修改
q:退出当前命令
a:添加修改
d:放弃修改
/:通过正则表达式匹配修改内容
?:查看帮助信息
update模式介绍
他会先列出工作区修改或删除的文件列表,新增的文件不会被显示,在命令行Update>>
后输入相应的列表序列号表示选中改下给你,回车继续选择,如果已选好,直接回车到命令主界面
# 全部提交到本地仓库
git commit
# 提交指定文件到本地仓库
git commit
# 添加提交备注信息,在提交文件后立马用
git commit -m "提交的备注信息"
# 将工作区修改或删除的文件提交到本地版本库,新增的文件不会被提交
git commit -am "备注信息"
# 修改最新一条提交记录的提交原因
git commit --amend - m "提交原因"
# 将当前文件改动提交到HEAD或当前分支的历史ID
git commit -C HEAD
注: 在 Linux 系统中,commit 信息使用单引号 ',Windows 系统,commit 信息使用双引号 "。
例如:在 git bash 中git commit -m '提交说明'
这样是可以的,在 Windows 命令行中就要使用双引号git commit -m "提交说明"
# 查看指定文件的修改历史
git blame 文件名
# 从100行开始,到110行 逐行查看文件的修改历史
git blame -L 100,10 文件名
# 查看指定文件的提交信息
git log 文件名
# 查看历史记录的简洁的版本
git log --oneline
# 逆向显示所有日志
git log --reverse --oneline
# 查找指定用户的提交日志
git log --author=Linus --oneline
# 查看指定日期区间的所有提交,可以用如下选项--since 和 --before,表示在之前,--until 和 --after表示在之后
# 下面表示的是三周前且11月十八日之后的所有提交
git log --oneline --before={3.weeks.ago} --after={2022-11-18}
# 下面是显示两周前开始到现在的历史记录
git log --since="2 weeks age"
# 想过滤看到的内容 过滤日志
git log --grep=<pattern>
# 其中 是你要搜索的关键词或正则表达式模式
# 查看近期提交的n条信息内容
git log -n
# 例如查看前5次的提交记录
git log -5
# 查看详细提交记录,可以对比历史记录的差异
git log -p
# 获取git log里的树形详细信息 包括hasg 日期 提交信息 提交人等,下面例子是在一行中输出简短的历史记录,其他可选项看下面列表
git log --pretty=format:"%h"
# 查看所有分支的所有操作记录,与git log的区别是它不能查看已经删除了的commit记录
git reflog
git log --grep=
# 搜索具有关键词 "bug" 的提交记录:
git log --grep=bug
#搜索具有关键词 "fix" 的提交记录:
git log --grep=fix
#搜索包含多个关键词 "feature" 和 "enhancement" 的提交记录:
git log --grep='feature|enhancement'
#使用正则表达式来搜索具有特定模式的提交记录(例如,以 "issue-" 开头的提交):
git log --grep='^issue-'
# 比较的是暂存区和工作区的差异,也就是尚未缓存的改动
git diff
# 暂存区与与上一次提交版本的差异,也就是已缓存的改动
git diff --cached
# 查看已缓存的与未缓存的所有改动
git diff HEAD
# 查看这2个版本哈希之间的区别
git diff 版本哈希值 版本哈希值
# 倒数第5个版本与第一个版本之间的差异
git diff tt
# 暂存区与仓库倒数第5个版本之间的比对
git diff --cached tt
# 列出打算清除的档案(首先会对工作区的内容进行提示)
git clean -n
# 删除操作
git clean -f
# 把.gitignore中忽略的档案也删除
git clean -x -f
使用如下命令打开git图像化工具GUI
gitk
# 将文件从暂存区和工作区删除
git rm 文件名
# 删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
git rm -f 文件名
# 只删除暂存区的文件,工作区保留
git rm --cached 文件名
# 清除缓存区
git rm -r --cached .
格式如下
git reset [--soft | --mixed | --hard] [HEAD]
# --soft 指针移动的时候,工作区内容不变,重置git commit提交
【简单来说就是取消commit操作,提交过的文件恢复到暂存区】
# --mixed 为默认,可以省略该参数,指针移动,重置git add、git commit操作
【简单来说就是取消add和commit操作,将提交的内容恢复到暂存区,再将暂存区的内容恢复到工作区】
# --hard 指针移动,工作区、暂存区内容删除,回到上一个提交的版本
【简单来说就是HEAD指针移动到指定版本后之后,其后面版本的工作区、、缓存区内容全部清除】
# 回退一个版本,将已提交的内容恢复到暂存区,不影响工作区的文件(未提交的也不受影响)
git reset HEAD^ --soft
# 回退一个版本,重置暂存区的文件与上一次的提交(commit)保持一致,不影响原来工作区(未提交的也不受影响)
git reset HEAD^
# 或者写成
git reset HEAD^ --mixed
# 回退一个版本,清空暂存区,将上个版本的内容完全替代本地工作区版本内容
git reset HEAD^ --hard
# 回退到该次提交id的位置 并将回撤内容保存在暂存区
git reset --soft commitID
# 将本地的状态回退到和远程仓库的一样
git reset --hard origin/master
# 从仓库回退到暂存区
git reset --files
# 所有内容都回撤完了后将回撤后的内容强制推送到远程分支
git push -f -u origin 分支名
回退n个版本
git reset HEAD # 表示当前版本
git reset HEAD^ # 回退1个版本
git reset HEAD^^ # 回退2个版本
git reset HEAD^^^ # 回退3个版本
...
# 回退n个版本
git reset HEAD~n
# 或者
git reset HEAD^n
# 把a文件名字改为b,并且直接放入到暂存区
git mv a b
# 把b文件移动到指定目录下
git mv b 目录名
# 在当前仓库加个标签
git tag 标签名字
# 创建一个带注解的标签,-a可以记录谁什么时候加的标签
git tag -a 标签名
# 查看标签列表
git tag
# 删除对应标签 只是删除了本地的
git tag -d 标签名
# 删除远程仓库的标签 可以在删除本地标签后 执行这个操作 同步远程
git push origin :refs/tags/远程标签名
# 给已知提交id的版本打标签
git tag 标签名 commitid # 给历史提交打V1.1.1的tag标签 这里的commitid可以缩写 缩写成前6位就可以
# 过滤标签
git tag -l # 过滤tag 例如 git tag -l "V1.1*" 表示 V1.1 V1.11 可以过滤前面是V1.1开头的内容
# 查看指定标签
git show 标签名称 # 查看tag的详细信息 包括commitid 作者信息 日期 内容
# 同步这个tag到远程服务器 默认tag是打在本地的 下面这个命令可以把它推到远程
git push origin 标签名称
# 将本地所有tag推送到远程服务器
git push origin --tags
# 把远程仓库的标签也拉取下来
git pull --tags
# 在当前提交上,打标签foo 并给message信息注释
git tag foo -m "message"
# 在某个哈希值上打标签并且写上标签的信息
git tag 标签名 哈希值 -m "message"
# 在当前提交之前的第4个版本上 打标签foo
git tag foo HEAD~4
# 新建分支
git branch 分支名
# 查看当前所有本地分支
git branch
# 切换分支
git checkout 分支名
# 创建并切换分支
git checkout -b 分支名
# 还原这个文件到对应的commitId的版本
git checkout commitId 文件名(文件路径下的文件名)
# 查看本地当前分支以及提交hash值和commit信息
git branch -v
# 查看全部分支(列出远程分支以及本地分支名 远程分支会以remote/origin/分支名这种形式展示 红色标识)
git branch -a
# 查看带有最后提交id、最近提交原因等信息的本地版本库分支列表
git branch -vv
# 列出远程分支(远程所有分支名)
git branch -r
# 合并指定分支到当前分支
git merge 指定分支名
# 把其他分支的某一次提交内容合并到当前分支
git cherry-pick commitId
# 删除本地分支
git branch -d 分支名
# 分支未提交到本地版本库前强制删除分支
git branch -D 分支名
# 修改分支名
git branch -m 旧分支名 新分支名
# 修改分支名 M强制修改 若与其他分支有冲突也会创建(慎用)
git branch -M 旧分支名 新分支名
# 删除远程版本库上的分支
git push origin --delete <分支名称>
git push origin :<分支名称>
# 将本地分支与远程分支相关联
git push -u origin <本地分支名称>
# 首先在当前项目主分支先执行git pull 把代码更新为最新
git remote set-url origin <新的仓库名>
git push -u -f origin
git push -u -f origin --all # 把所有分支迁移过去
git push -u -f origin --tags # 把所有tag迁移过去
# 然后去拉取新的仓库代码就可以了 如果新仓库之前拉取过了
# 重新仓库迁移 里面分支没同步的话 执行 git fetch试一下 同步过来
由于git底层系统也是linux,所以文件的编辑操作和linux操作系统的命令一样,可以看这篇文章【vi编辑器】
git status
1、对于提交,它显示日志消息和文本差异。 它还以 git diff-tree --cc 生成的特殊格式呈现合并提交。
2、对于标签,它显示标签消息和引用对象。对于树,它显示的名称(相当于使用 git ls-tree 和 --name-only 选项)。
3、对于简单的 blobs,它显示了普通的内容。该命令采用适用于 git diff-tree 命令的选项来控制如何显示提交引入的更改。
# 查看提交
# =======================================
# 查看最后一次提交修改的详细信息 也可以用git show 哈希值 查看对应的内容
git show HEAD
# 查看倒数第二次的提交修改详细信息
git show HEAD^
# 查看前2次变更
git show HEAD^^
# 或者
git show HEAD~2
# 查看提交详情
git show commitID
# 查看标签
# =======================================
git show 标签名
git remote -v # 查看远程版本库信息
git branch -r # 查看远程分支信息
git remote show <remote> # 查看远程版本库信息
git remote add <remote> <url> # 添加远程版本库,是给远程仓库命名,通常是origin
git fetch <remote> # 从远程代码库获取最新代码(不合并到本地分支)
git pull <remote> <branch> # 获取最新代码并快速合并
git push <remote> <branch> # 上传代码并快速合并,是指将代码上传到该分支上
git push <remote> :<branch/tag-name> # 删除远程分支或标签
git push origin --delete <分支名称/标签名称> # 删除远程分支或标签
git push -tags # 上传所有标签
< remote>是指远程仓库名
git stash 命令用于将当前工作目录中的修改保存到一个临时区域,以便你可以在稍后的时间回到原始的工作状态。它通常用于以下情况:
1、切换分支:当你在当前分支上有未完成的修改时,可以使用 git stash 将这些修改保存起来,然后切换到另一个分支进行工作。
2、修复bug:当你正在开发一个新功能或解决一个bug时,突然需要切换到其他紧急的任务上,可以使用 git stash 将当前的修改保存起来,然后处理紧急任务。完成后,再回到原来的工作区继续进行开发。
3、临时备份:当你想要保存当前工作目录的状态,但又不想创建新的分支或提交时,可以使用 git stash 进行临时备份。
以下是 git stash 常用的一些命令:
git stash save "message":将当前修改保存为一条 stash 记录,并附带一条自定义的说明信息。
git stash list:列出所有的 stash 记录。
git stash show:显示最近的 stash 记录所包含的修改信息。
git stash apply stash@{0} :恢复stash第一个内容
git stash apply:应用全部,将stash中的内容恢复到当前目录,不会将缓存堆栈中的对应stash删除。
git stash pop:弹出最近的 stash 记录到当前工作目录,并将该 stash 记录从列表中删除。
git stash drop:删除最近的 stash 记录。
git stash branch <branch-name>:创建一个新分支,并将最近的 stash 记录应用到这个分支上。git
git stash clear:清除所有的 stash 记录。
# 简洁的输出git status中的信息(sb是 short branch)
git status -sb
1、撤销修改
git checkout -- a.html
(1)如果还没有执行git add 操作,那么执行上面命令后,会恢复到和版本库中一摸一样的版本状态
(2)如果执行了git add但还没有执行git commit,那么执行上述命令之后,会恢复到git add结束后的状态
(3)一旦执行了git commit -m “*”,就不能在使用上面的命令进行回退撤销
2、撤销新建文件
如果还没有执行git add命令,即没有被git追踪,那么如果你想撤销新建文件,那么可以执行如下命令
git clean -f ../aa.html
3、撤销新建文件夹
新建一个文件夹demo,并未执行git add命令进行追踪时,如果要撤销新建操作,可执行如下命令
git clean -df ./demo
4、撤销提交操作
撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
# 撤销前一次提交操作
git revert HEAD
# 撤销前一次提交操作,并以默认的Revert "xxx" 为提交原因
git revert HEAD --no-edit
# 多次撤销
git revert -n HEAD
# 查看文件每行代码块的历史信息
git blame
# 查看文件1-10行历史信息
git blame -L 1,10 demo.html
# 二分查找历史记录,排查bug
# 开始二分查找
git bisect start
# 标记当前二分提交id为有问题的点
git bisect bad
# 标记当前二分提交ID为没有问题的点
git bisect good
# 查到有问题的提交ID后回到原分支
git bisect reset
# 运行git的垃圾回收功能,清除冗余的历史快照
git gc
持续更新…