Git命令学习
配置
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
不配置也行,当遇到要求登录权限的远程仓库会让你在手动输入用户名、邮箱、以及密码。
初始化
git init
克隆仓库 下载仓库
git clone 链接
添加文件
git add . # 添加全部文件
git add 文件名 # 添加单个文件
Commit
git commit -m "内容" # 添加commit信息
git commit --amend # 改写提交 重写上一次的提交信息
Commit规范
使用commit时在内容中添加以下标签,使commit提交更加规范:
feat:
新功能(feature)fix:
修补bugdocs:
文档(documentation)style:
格式(不影响代码运行的变动)refactor:
重构(即不是新增功能,也不是修改bug的代码变动)chore:
构建过程或辅助工具的变动revert:
撤销,版本回退perf:
性能优化test:
测试improvement:
改进build:
打包ci:
持续集成
查看日志
git log
git reflog # 查看提交历史
移除文件
git rm
此方法仅限git rm
,因为git rm
会先将文件放入缓存区,且没有使用commit
提交的情况下。
首先使用git rm
删除一个文件:
git rm d.c
然后使用git reset
重置所有缓存区操作:
git reset
重置完成之后使用git checkout
命令将文件取消操作:
git checkout d.c
回滚代码仓库
git reset
有三种模式:--soft
、--mixed
以及--hard
。
- 使用
--soft
就仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。 - 如果使用
--mixed
,就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。 - 如果使用
--hard
,那么一切就全都恢复了,头变,add的暂存区消失,代码什么的也恢复到以前状态。
回滚到指定历史版本
先使用git log
查看历史版本:
git log
然后使用git reset --hard
命令回滚:
git reset --hard 要回滚id
回滚当前仓库指向的版本
git reset --hard HEAD^
^
代表上一个版本的意思,HEAD
代表当前仓库的指向。
当然我们也可以使用另外一种方式来回滚到当前仓库的指定版本:
git reset --hard HEAD~3
~3
代表以当前版本为基数,回滚多少次。
查看提交之后文件是否做了改动
git status
Git创建分支
git branch
git checkout
使用git checkout -b
参数来创建一个分支,创建完成分支后会自动切换过去:
git checkout -b dev
然后使用branch
来查看当前属于哪个分支,也就是查看HEAD
的指向:
git branch
git checkout -b
等价于:
git branch dev
git checkout dev
git branch
如果后面跟着名字则会创建分支,但不会切换。
git checkout
后面如果是分支名称则切换过去。
git merge 分支名 # git合并分支
git branch -a # git查看分支
git branch -D 文件名 # git删除本地分支
git push origin --delete # git删除远程分支
Git修改分支名称
使用-m
选项:
git branch -m 分支名 新的分支名
Git保存当前工作切换分支
git stash pop
当在别的分支做完事情之后,在切换回刚刚的分支,然后在刚刚的分支中将状态恢复。
将别的分支修改转移到自己的分支
git cherry-pick
Git强制合并分支
--allow-unrelated-histories
Git拉取远程所有分支
git fetch
也可以拉取指定分支的最新内容:
git fetch xxxx
Git子模块管理
git submodule
Git分支开发步骤
一般情况下我们开发都要在不扰乱master代码的情况下进行开发:
- 拉取分支,分支名简明摘要说要干什么,然后干活,在合并到master,合并之后在删除分支,这是基本步骤,不需要留额外分支,分支只是为了将来看代码时方便而已,能看到这个分支是干什么的。
Git强制删除分支
git branch
如果遇到无法删除的分支可以使用git branch -D
大写的D即可。
Git查看不同分支的文件差异
git diff
Git查看仓库信息
git remote
使用remote -v
可以查看更详细的权限信息。
fetch
代表可以拉取仓库,push
代表可以推送。- 如果没有权限只能拉取的情况下不会显示
push
。
Git新增分支操作
git switch
git restore
这两个命令是git 2.23以后引入的命令,目的是为了提供对新手更友好的分支操作,最早我们使用的是git checkout
命令来对分支进行操作,这个命令相对于复杂了许多,使用很多子参数来进行操作,为此git新增了两个命令:switch
、restore
,switch
是用来切换分支与新增分支的,而restore
用来撤销文件的修改,使其变得更明确一点。
切换分支
git switch dev
注意如果分支不存在,是不会创建的。
切换到commit ID
切换到指定id并创建一个分支,我们称之为分离HEAD状态:
git switch -d f8c540805b7e16753c65619ca3d7514178353f39
只需要加上-d
参数就可以了,而checkout
是不需要加-d
的,在switch
里一切变得明确了很多。
创建分支
如果要合并一个分支必须加上-b
:
git switch -b dev
创建分支则是-c
:
git switch -c dev
git restore命令
是用来撤销提交与修改的,如:
git restore file
使用这条命令会将文件从暂存区删除。
git restore file
这条命令会不会将文件从暂存区里删除,会将文件在暂存区里的状态覆盖到工作区,如我在工作区对这个文件又进行了修改,那么使用这个命令可以将这个文件在暂存区里的内容恢复到工作区。
Git命令总结
创建
克隆现有存储库
git clone
创建一个新的本地存储库
git init
当地变化
Changed files in your working directory
git status
Changes to tracked files
git diff
将所有当前更改添加到下一个提交
git add .
在中添加一些更改到下一次提交
git add -p
提交跟踪文件中的所有本地更改
git commit -a
提交先前进行的更改
git commit
更改最后一次提交
警告: 不要修改已发布的提交!
git commit --amend
提交历史
显示所有提交,从最新开始
git log
显示特定文件随时间的变化
git log -p
谁更改了中的内容和时间
git blame
分支结构和标签
列出所有现有分支
git branch -av
切换HEAD分支
git checkout
根据您当前的HEAD创建一个新分支
git branch
基于远程分支创建一个新的跟踪分支
git checkout --track
删除本地分支
git branch -d
用标签标记当前提交
git tag
更新和发布
列出所有当前配置的遥控器
git remote -v
显示有关遥控器的信息
git remote show
添加名为的新远程存储库
git remote add
从下载所有更改,但不要集成到HEAD中
git fetch
下载更改并直接合并/集成到HEAD中
git pull
在远程上发布本地更改
git push
删除遥控器上的分支
git branch -dr
发布标签
git push --tags
合并与基础
将合并到当前HEAD中
git merge
将当前的HEAD重新设置到
警告: 不要重新发布已发布的提交!
git rebase
中止基准
git rebase --abort
解决冲突后继续进行基准
git rebase --continue
使用您配置的合并工具解决冲突
git mergetool
使用编辑器手动解决冲突,并(在解决之后)将文件标记为已解决
git add
git rm
撤消
丢弃工作目录中的所有本地更改
git reset --hard HEAD
放弃特定文件中的本地更改
git checkout HEAD
还原提交(通过产生具有相反更改的新提交)
git revert
将HEAD指针重置为上一次提交
-
…并丢弃此后的所有更改
git reset --hard
-
…并将所有更改保留为未分阶段的更改
git reset
-
…并保留未提交的本地更改
git reset --keep