GIT 详细命令介绍

SSH 配置

git安装克隆提示Cloninginto项目
git clone git@gitee.com:yyds123/ll.git
创建用户
git config --global user.name “名称”
git config --global user.email “邮箱”
git 生成秘钥 并连接 码云
1, ssh-keygen -t rsa -C “xxxxx@xxxxx.com” 注册码云的邮箱
按三次回车,不用添加任何东西
2, cat ~/.ssh/id_rsa.pub
查看秘钥 并复制 到 码云上
3, ssh -T git@gitee.com
出现 (Welcome to Git@OSC, yourname!) 证明链接成功

初始化仓库

在这里插入图片描述
在这里插入图片描述

GIT四个区域

在这里插入图片描述

最底层工作目录

第三层面、第一次暂存文件,是会在.git的目录下生产index文件

第二层面 本地仓库

第一层面 远程仓库

如果代码提交到本地仓库,在对文件做任何的增删改查操作都会对
操作进行记录

GIT的四种状态

在这里插入图片描述

未跟踪文件:只是存在工作目录(区域) Untracked files:

未被修改:已经存在本地仓库了,但是我没有对文件修改(都在工作,暂存区,本地仓库都有一份)

被修改状态:在本地仓库进行了修改

由于git是分布式版本控制工具,存在着本地仓库和远程仓库,所以我们在本地工作副本进行的编辑,要先提交到本地仓库再从本地仓库推送到远程仓库。

git命令

查看仓库状态

git status 

在master分支下 ,初始化commit ,没有任何事情commit
在这里插入图片描述

把一个文件从本地工作目录移交到暂存区

使文件状态从Untracked 变成Staged状态

 git add a

把所有文件提交到暂存区
在这里插入图片描述
在这里插入图片描述
暂存区是在.index

在这里插入图片描述

把暂存区的内容在回滚到工作目录

git rm --cached c 

在这里插入图片描述

git add 撤销操作 也就是将暂存的数据删掉

git reset HEAD projectApp/vhall_backend_frame/app/vendor/vhall-component/room/src/services/InavService.php

git restore 放弃工作目录中的更改

git restore projectApp/vhall_backend_frame/app/vendor/vhall-component/room/src/services/InavService.php

git restore --staged…取消存储

git restore --staged vendor/vhall-component/roo.room.sql

git deleted状态怎么处理

一种是 git rm --cached "文件路径",不删除物理文件,仅将该文件从缓存中删除;

一种是 git rm --f "文件路径",不仅将该文件从缓存中删除,还会将物理文件删除(不会回收到垃圾桶)

然后再推送到仓库

删除工作目录文件c

在这里插入图片描述

同时把本地目录和暂存区里面内容删除

删除c文件

git rm -f b

在这里插入图片描述

提交本地仓库

git commit -m "commit a"

在这里插入图片描述

直接对工作目录和暂存区的文件重命名

b.txt 改成 a

git mv b.txt a

在这里插入图片描述

查看文件改变了什么内容 进行对比

对比的是本地目录和暂存区

git diff a 

在这里插入图片描述
在这里插入图片描述
本地目录提交到 暂存区

这样本地目录提交到 暂存区是一致的了文件内容
在这里插入图片描述

暂存区和本地仓库进行对比

git diff --cached a 

在这里插入图片描述

当前历史git log 历史操作所有id 每次的commit的id git reflog

git log
git log --oneline --decorate

改变了工作目录 暂存区和本地仓库没有改变

用暂存去覆盖了工作目录

在这里插入图片描述

git checkout -- a 

现在是工作目录和暂存区改变一致了 但是错误 我用本地仓库回退,覆盖暂存区和工作目录

在这里插入图片描述
说明 git diff a 说吗本地目录不一致了
在这里插入图片描述

我要回退某一次 commit

回退哪个commit 的id

git reset --hard (回退哪个commit 的id)

每一次的commit 的id 的历史记录

git reflog

在这里插入图片描述
在这里插入图片描述

分支

分支就是指向快照的一个指针

分支总是落在最后一个提交 HEAD(当前分支)

git log --online --decorate

在这里插入图片描述

创建分支

git branch testing
git branch   

在这里插入图片描述

查看分支

查看本地分支 git branch
查看远程分支 git branch -r
查看本地和远程分支 git branch -a
清理本地无效分支(远程已删除本地没删除的分支): git fetch -p
如果分支太多,还可以用此命令进行分支模糊查找: git branch | grep 'branchName'

删除分支

删除本地分支 git branch -d 本地分支名

删除本地已合并的分支: git branch -d [branchname] 
某些情况下可以用 git branch -D [branchName] (使用时应注意是否已合并)

删除远程分支 git push origin --delete 远程分支名[branchname]
推送空分支到远程(删除远程分支另一种实现)git push origin :远程分支名

提交数据

在这里插入图片描述

合并 谁合并谁

把testing命令合并的master上 ,当前是master

git merge testing

在这里插入图片描述

基本操作

设置用户名和邮箱

$ git config --global user.name "用户名"
$ git config --global user.email "邮箱"
  1. 其中,–global 是全局设置,如果想对特定项目使用不同配置,可取消该参数
  2. git config 还可以设置其他选项,因为平时不怎么用,所以详细可以参考 git config --help

查看配置

$ git config --list

# 查看 Git 的某一项配置
$ git config user.name

创建 SSH Key

$ ssh-keygen -t rsa -C "邮箱"

# 然后会在用户主目录下,发现 .ssh 目录,其中包含 id_rsa 和 id_rsa.pub 两个文件
# id_rsa.pub 是 SSH Key 公钥,将其添加到 github 的 SSH keys 中,就可

创建本地仓库,进行基本源代码管理

# 克隆
$ git clone 仓库地址
 
# 远程仓库
$ git remote
 
# 分支
$ git branch 分支名    // 创建
$ git checkout 分支名  // 切换
 
# 合并
$ git merge 分支名
 
# 拉取更新
$ git fetch 主机名 分支名    // 不合并
$ git pull 主机名 分支名    // 合并
 
# 推送
$ git push 主机名 分支名
 
# 打标签
$ git tag -a 版本号 -m "版本说明"

忽略 SSL 证书错误

通过 HTTPS 访问 Git 远程仓库时,如果服务器的 SSL 证书未经过第三方机构签署,那么 Git 就会阻止这一操作

$ env GIT_SSL_NO_VERIFY=true git clone 仓库地址
$ cd 仓库名称
$ git config http.sslVerify "false"

- 使用 env 命令保证了忽略证书错误只应用于此次克隆

储藏

当有未提交的修改,执行 切换分支 或 拉取更新 需要仓库状态保持 clean 的一些操作时,可以使用 git stash 将目前的修改临时储藏起来

# 储藏
$ git stash
 
# 查看储藏
$ git stash list
 
# 应用最近储藏并删除
$ git stash pop
 
# 应用指定储藏不删除
$ git stash apply [储藏名]
 
# 移除储藏
$ git stash drop 储藏名

撤消操作

对于 工作区 和 暂存区 的修改,我们不能保证上次操作是完美的,git 就是这么强大,提供了很多 反悔 的操作

# 丢弃暂存区的文件,放回工作区
$ git reset HEAD 文件
 
# 丢弃工作区的修改
$ git checkout -- 文件
 
- 修改后没添加到暂存区,则撤销到 git commit 时的状态
- 修改后添加到暂存区,则撤销到 git add 时的状态
 
# 覆盖上次提交
$ git commit --amend [-m "本次提交说明"]

版本回退

# 回退到之前的某次提交
$ git reset --hard commit_id
 
- HEAD 指向当前版本
- git log 可以查看提交历史,以便确定要回退到哪个版本
- git reflog 可以查看命令历史,以便确定要回到未来的哪个版本
 
# 撤销一个已经提交
$ git revert commit_id
 
- 并没有从项目历史中移除这个 commit, 而是生成一个新的 commit

分支

Git 有很多优点,其中 分支使用方便 就是很显著的一条,创建仓库的时候,master 是默认的分支,一般,我们会创建其他的分支在上面进行开发,完后再将它们合并到主分支上来

# 创建开发分支
$ git branch dev
 
# 创建并切换到开发分支
$ git checkout -b dev
 
# 切换回主分支
$ git checkout master
 
# 快速检出上一个分支
$ git checkout -
 
# 查看所有分支
$ git branch -a
 
# 查看合并到当前分支的分支列表
$ git branch --merged
 
# 查看还没合并到当前分支的分支列表
$ git branch --no-merged
 
# 删掉临时分支
$ git branch -d fix
 
# 将开发分支推送到远程仓库
$ git push origin dev
 
# 重命名分支
$ git branch -m dev develop
 
# 删除远程分支
- $ git push origin --delete 分支名
- $ git push origin :分支名

标签

软件要发布一个新的版本的时候,我们通常给它打个 tag

# 打标签
$ git tag [-a] 标签名 [-m 附注信息 某次提交的id]
 
# 推送标签到远程仓库
$ git push origin 标签名
$ git push origin --tags    // 推送所有标签
 
# 删除本地标签
$ git tag -d 标签名
 
# 删除远程标签
$ git push origin --delete 标签名
$ git push origin :refs/tags/标签名

提交

# 花式查看提交
$ git log --pretty=oneline  // 只显示一行
$ git log --abbrev-commit   // 只显示 SHA-1 的前几个字符
$ git log --graph           // 显示 ASCII 图形表示的分支合并历史
$ git log --relative-date   // 使用较短的相对时间显示
$ git log --name-only       // 仅在提交信息后显示已修改的文件清单
$ git log -n                      // 显示最近的 n 条提交
$ git log --author=fengshangwuqi  // 仅显示指定作者相关的提交
$ git log --grep                  // 仅显示含指定关键字的提交
 
# 没有任何改动的提交
git commit -m "a no chnage commit" --allow-empty
 
主要用于一下情形:
- 标记新的工作或一个新功能的开始
- 记录对项目的跟代码无关的改动
- 跟使用你仓库的其他人交流
- 作为仓库的第一次提交,因为第一次提交后不能被 rebase

git pull 与 git pull --rebase 的区别

$ git pull = git fetch + git merge
$ git pull --rebase = git fetch + git rebase

git merge 与 git rebase 的区别

# 相同点
整合的最终结果所指向的快照是一样的
 
# 不同点
## 提交历史不同
- merge 会生成一个新的 commit 节点,提交历史忠实地记录了实际发生过什么
- rebase 不会产生额外的 commit 节点,提交历史反映了项目过程中发生了什么
## 冲突处理策略不同
- merge 遇见冲突后会直接停止,等待手动解决冲突并重新提交后,才能再次 merge
- rebase 遇见冲突后会暂停当前操作,开发者可以选择手动解决冲突,然后 git rebase --continue 继续,或 --skip 跳过,或 --abort 停止
 
# 注意事项
## 推荐 git merge 结合 --no-ff 一起使用
- git merge 默认是 fast forward(快速合并),适用于分支 B 从分支 A 从 checkout 出来后,分支 A 没有 commit
- 如果分支 B 被 checkout 出来后,分支 A 也有修改,那么就没法快速前进合并,会额外建立一个 merge commit,对分支 A 和分支 B 做一个合并操作,即 --no-ff,它的好处是保持了分支的结构
#1/ 工作区代码(文件被修改了,但未执行git add操作)
git checkout <filename> 
#或
git checkout .

#2/ 文件执行了git add到缓存区,并未commit提交
# 取消暂存
git reset HEAD <filename> 
# 撤销修改
git checkout <filename> 

#3/ git commit到本地,没有git push到远端
git reset --soft HEAD~1 撤回最近一次的commit(撤销commit,不撤销git add)

git reset --mixed HEAD~1 撤回最近一次的commit(撤销commit,撤销git add)

git reset --hard HEAD~1 撤回最近一次的commit(撤销commit,撤销git add,还原改动的代码)

#4/ git push提交到远端
#删除最后一次远程提交
#使用revert 会有新的 commit 记录
git revert HEAD
git push origin master
#使用reset 不会产生新的 commit 记录
git reset --hard HEAD^
git push origin master -f

#回滚某次提交
git log
git revert <commit_id>


#其他补充,冲突解决
#merge 冲突
git checkout test
git merge b1
git status
git add . 
git commit -m 'conflict fixed'


#本地提交冲突
git stash #暂存
git stash list #查看暂存列表
git pull #拉取
git stash pop stash@{0} #还原暂存的内容
git status #冲突文件
vim readme.txt #解决冲突<<< === >>>
git stash drop stash@{0} #删除暂存
git stash clear #清理所以暂存

git add readme.txt 
git commit -m "conflict fixed"

全部删除,你改的也没有了

git fetch --all && git reset --hard origin/分之名字

git 拉取远程代码
Git拉取远程代码
git 从远程拉取代码、推代码的步骤
Git 分支合并代码
Git恢复之前版本的两种方法reset、revert(图文详解)
git所划分成几个区域,各区域的作用以及各区域之间的联系
真的解决了我的问题!!!git配置ssh时报错:Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
git教程

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伟伟哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值