Git 原理图
常用命令
初始化 git init
配置 git config
- 配置每次提交的用户名和邮箱,加global配置的是全局的,所有仓库都是这个,不加配置的就是当前仓库的
- 也可以通过配置文件进行设置,当前仓库配置
.git/config
文件,全局文件配配置主用户目录下的.config
文件
git config --list ## 查看配置
git config --global user.name "用户名"
git config --global user.email "邮箱"
查看 git Status
- 文件前的A代表添加,M代表修改,绿色代表添加到缓存,红色代表未添加到缓存
- 简要查看
git status -s
- M a.txt 代表 新建a.txt文件先添加到缓存,本地又做修改,但未添加到缓存。
- AMM a.txt 代表 a.txt 文件修改后添加到缓存,然后又做修改
比较 git diff
- 比较本地和缓存
git diff
- 比较缓存和仓库
git diff --cached [file]
- 比较本地和仓库
git diff head
重置 git reset
- 默认
git reset HEAD
重置暂存区 仓库和本地版本不变 - 参数 HEAD:代表重置的版本号,默认为当前仓库版本,可不写,上一版本为HEAD^ ,也可指定日志版本
- –hard 参数代表同时重置本地文件
- –soft 只重置仓库,不重置本地和暂存
- git reset --hard HEAD 本地、暂存、仓库同时重置为当前仓库版本
- git reset HEAD^ [文件] 重置暂存、仓库为上一版本
- git reset --hard HEAD^ 本地、暂存、仓库同时重置为仓库上一版本
- git reset --soft HEAD^ 回滚仓库版本,本地和暂存不变
拉取 git checkout
-
git checkout [文件名] 获取暂存版本到本地
-
git checkout HEAD [文件名] 获取仓库版本到本地
-
git checkout HEAD^ [文件名] 获取仓库上一版本到本地
-
git checkout HEAD 加文件路径,表示把文件拿到本地,不加路径表示拿版本文件,并创建游离分支
总结 git checkout 两个作用:切换分支、拉取文件,默认拉取当前暂存,加版本号拉取仓库指定版本
撤销 git revert 、
- git revert head 回退到上一版本,以进为退,相当于对上一版本的又一次提交,本地暂存都会被更新
重置 git restore
git restore --staged
重置暂存git restore
重置本地
删除 git rm
-
git rm --cached runoob.txt 从缓存中删除文件
-
git rm runoob.txt 从缓存和本地中删除文件
-
git rm -rf 文件夹名 从缓存和本地删除文件夹
-
git checkout -b 分支名 切换分支,如果分支名不存在,则新建一个和当前分支一摸一样的分支
分支 git branch
- git branch 查看分支
- git checkout 分支名 切换分支
- git checkout -b 本地分支名 origin/远程分支名 从远程切出新的分支
- git branch -d 分支名 删除分支
合并 git merge
- git merge 分支名 合并分支到当前分支
- git merge origin/master 合并远程分支到本地分支 更新本地、暂存、仓库
变基 git rebase
- git pull --rebase 远程分支名 把远程的代码合并到本地,然后再提交本次改动版本
- git rebase master 把master 分支合并到当前分支上,作为一个新的提交基点,然后提交本次改动版本
- git rebase --abort 放弃执行 rebase 命令
- git rebase --skip 跳过,会丢弃本次提交的内容,慎用,会丢失提交。
- git rebase 命令有冲突,修改冲突后执行 add 命令,加入暂存区,然后执行 git rebase --continue 命令完成合并,当提交多个版本进行rebase,并每个版本都有冲突时会进行多次版本冲突解决,执行多次 add 和 continue,这里和merge 有区别,merge 命令只需要解决一次冲突。所以推荐 分支之间尽量用 merge ,解决冲突真的很麻烦。
暂存 git stash
- git stash save ‘save message’ 暂存文件
- git stash list 查看暂存
- git stash show 查看改动信息
- git stash show stash@{$num} 查看指定改动信息 如:git stash show stash@{1}
- git stash apply stash@{$num} 应用暂存
- git stash pop stash@{$num} 弹出暂存到本地
- git stash drop stash@{$num} 删除暂存
- git stash clear 删除所有缓存的stash
其它命令
- git ls-files -s 查看暂存版本
- git fetch origin 获取远程代码 对本地、暂存、仓库没有任何影响
- git reflog 查看仓库操作命令
- git commit --amend -m “提交信息” 修正最后一次提交内容
- git blame <选项> <文件路径> 以列表形式展示某个文件提交记录
- git config --global log.date iso8601 设置全局日期格式
- git config --global log.date “format:%Y-%m-%d %H:%M:%S”
常用场景解决
Git 连接远程仓库
- 第一步:生成密钥 `ssh-keygen -t rsa -C “邮箱账户” 执行完会让输入一些东西,先不管,默认一路回车。执行完成后会在当前登录用户下生成一个.ssh的文件夹成功的话会在~/下生成.ssh文件夹,进去,打开id_rsa.pub,复制里面的key。回到github上,进入 Account Settings(账户配置),左边选择SSH Keys,Add SSH Key,title随便填,粘贴在你电脑上生成的key。
- 第二步: 执行命令验证$ ssh -T git@gitee.com 如果是第一次的会提示是否continue,输入yes就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上github。
把本地项目推送到Git上管理
- 在github上新建仓库
- 打开本地根目录执行git init 初始化本地仓库
- 执行 git remote add origin [远程仓库地址] 将本地仓库和远程仓库关联
- 执行 git pull origin master --allow-unrelated-histories
- 执行 git push origin master
$ git init
$ git remote add origin [远程仓库地址]
- 取消本地和远程的关联 git remote rm origin
- git push origin [分支名] 把本地分支推上远程,远程没有分支则会新建
合并多次提交
- git reset --soft HEAD^ 回滚仓库版本,本地和暂存不变
- 重新提交
解决控制台中文乱码问题
git config --global core.quotepath false
git config --global gui.encoding utf-8
git config --global i18n.commit.encoding utf-8
git config --global i18n.logoutputencoding utf-8
// 如果是在windows 环境可以尝试设置环境变量
set LESSCHARSET=utf-8
Git运行优化
垃圾回收
// 这个命令会立即删除不再引用的对象,并且清理掉所有的引用。
git gc --prune=now
// 这个命令会进行更加激进的垃圾收集,可以帮助删除更多的无用对象。
git gc --prune=now --aggressive
// 这个命令会让 Git 自动在每次提交后进行垃圾清理。
git config --global gc.auto
附带两个学习教程
- 分布式版本管理工具,学习教程:https://www.liaoxuefeng.com/wiki/896043488029600/898732864121440
- 菜鸟教程 https://www.runoob.com/git/git-tutorial.html
- git 手册 https://www.bookstack.cn/read/git-doc-zh/README.md