git合集

前置知识

在GIT 中, 有两个 [偏移符号] : ^ ~
^ 的用法 : 在 commit 的后面加一个或多个 ^ 号 , 可以把commit 往回偏移,偏移的数量是^的数量
例如 master^ 表示 master 指向的 commit 之前的哪个 commit ;
HEAD 所指向的 commit 往前数两个 commit
~ 的用法:在 commit 的后面加上 ~ 号 和一个数 可以把 commit 往回偏移, 偏移的数量的是~号 后面的数 例如 HEAD~5 表示 HEAD 指向的 commit 往前数 5个 commit

  • reset 和 rebase 都会用这个 但是参照点不一样

 reset  是 HEAD  回退到历史版本,到当前版本 差异值
 
 rebase 是重新定义基准点   基本点以后所有commit 都可以操作
 

版本回退

在这里插入图片描述

基本使用



重置位置的同时,清空工作目录和暂存区的所有内容;
1、git reset --hard:

重置位置的同时,保留工作目录和暂存区的内容,并把重置 HEAD 的位置所导致的新的文件差异放进暂存区。
2、git rest  --soft:

(默认):重置位置的同时,保留工作目录的内容,把暂存区和重置 HEAD 的位置所导致的新的文件差异都放入工作目录
3、git rest  --mixed 




4、git checkout 文件名


5、导出历史记录
history > 文件名


注意:

  • git checkout 后面是有点的

应用场景

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file 还没执行git add添加到暂存区

  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作执行了git add添加到了暂存区

  • 已经提交了不合适的修改到版本库时,想要撤销本次提交 首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^ , 上上一个版本就是HEAD^^,当然往上100个版本写100个 ^比较容易数不过来,所以写成HEAD~100。

配置用户

  • 不配置不能提交代码
git  config  --list
git  config   --global  user.name 你的名字
git config   --global  user.email  邮箱

关联远程

  • git remote add 标识名(master) 远程地址 本地关联远程仓库
  • git remove -v 查看关联远程仓库

分支

  • 创建分支
git branch 分支名
  • 删除分支
git branch -d 分支名   // 删除分支名  (不能在当前分支删除当前分支)
  • 查看本地分支
    问题: 当你新创建的一个分支 并跳到新的分支上 此时是查不到当前创建的新的分支的
    分支的原理: 分支的出现最少要一个commit
    链接参考 :分支原理
git branch 
  • 查看远程所有分支
git branch  -a
git branch -r

区别: git branch -a 显示 不全

别人在远程提交新分支仓库,本地没有git fetch的话,使用git branch -a是查看不全的,所以有新分支出现一定要先git fetch再git branch -a

  • 分支之间文件界限问题

注意:当你在主分支 创建一个分支 并添加文件 此时的文件是属于主分支还是 分支 (主要看你在那个分支把这个文件添加到 历史区 之后两个分支就没关系了)

git stash 分支有更改 不能直接切换 可以提交更改或者暂存更改 暂存使用 过渡区覆盖掉工作区

git pop 还原 暂存区的修改

  • 本地创建分支 并且跳转
git checkout -b rights   // 创建并跳转 rights 
  • 查看本地有几个分支 并查看当前在那个分支
git  branch
  • 推送到云端 (是第一次推送 需要设置 -u origin 云端仓库的别名)
git push - u  origin  rights  // 本地分支推送到云端 为云端创建一个分支

变更 commit

  • git commit --amend 该写最近一次的 commit

    该写以前的 某个 commit

  • git rebase -i 版本号(你要变更的版本号的前一个 或者是 父亲 被选的版本号是不被包含的 ) 会弹出的 交互式的 把要改的记录 pick 变更为 reward

  • 连续的多个 commit 整理成一个commit git rebase - i

  • 把间隔几个commit 整理成一个 commit git rebase - i 把要合并的间隔分支排列一起 留一个 pick 其他的改为 s

在这里插入图片描述

合并分支

合并的方式有两种:快速合并 和 三方合并。
快速合并
如果分支A当前的修改,是完全基于分支B的修改而来,则B分支合并A分支,就是移动指针即可。
在这里插入图片描述
在不具备快速合并的条件下 会采用三方合并

在这里插入图片描述
三方合并,它是把两个分支的最新快照(2 和 3)以及二者最近的共同祖先(1)进行三方合并,合并的结果是生
成一个新的快照(并提交)

合并冲突
两个分支进行合并,但它们含有对同一个文件的修改,则在合并时出现冲突,git无法决断该保留改文件哪个分
支的修改。

  • 合并分支 合并到主分支 切到主干 在合并
把其它分支 合并到 主分支
git  branch
git checkout master
git merge  分支名
  • 出现冲突后 如果由两个开发人员当面协商 该如何取舍 为冲突文件定义最终的内容
  • 解决方案 一、保留某一方 删除另一方的 二、保留双方的 三、但无论如何 要记住删除 <<< ==== >>>

修改本地分支名称 && 新建远程分支

修改分支名称

git branch -m 'BYFramework'

新建远程分支

git push origin BYFramework:BYFramework

git 对比

git 对比

git diff

git diff 分支名 分支名 // 比较两个分支的差异
git diff 分支名 分支名 文件名 //比较两个分支下的某个文件差异
git diff – cached // 工作区和暂存区比较 比较所有文件
git diff – 文件 // 单独比较

  • git diff : 比较工作区与暂存区
  • git diff --cached : 比较暂存区与版本区
  • git diff master : 比较工作区与版本区

linux 命令



history >xxx.txt   把历史操作步骤输出	

pwd  //打印当前目录    print working  directory

rm  -rf 文件名    // 删除文件

mkdir 文件夹名字   // 创建目录

cd 目录名   //跳到指定目录  changde directory

ls -al   // 显示目录下所有文件

cd .. //返回上一级目录

cat 文件名 (1.text) // 显示文件内容

mkdir xxx 新建文件夹
vi x.txt 新建文件(Visual editor)
输入 i 进入编辑模式
ESC ++ wq 保存并退出

clear  // 清屏

i: 插入模式  esc退出编辑模式  

:q!强制退出 (加冒号)

:wq 保存退出

clear 清空小黑窗

touch 文件名   文件名

echo hello  >> 1.txt  // 向1.txt文件中输入 hello (> 一个代表输入 两个代表追加)

DOS 命令

查看电脑的IP地址: ipconfig / ipconfig  -all
查看自己的网络状况 
ping www.baidu.com  -t
exit 关掉DOS命令窗口
cls 清屏
文件夹
cd  ../  返回当前文件夹目录上一级目录
cd ./当前目录
cd  / 当前磁盘的根目录
D: 直接进入到D盘
cd 文件名   进入指定文件夹
dir  看当前文件夹有什么文件  隐藏的也可以看

git的分区

git 工作区 (git add .) => 暂存区 (git commit -m) => 历史区 /版本区

一个版本对应一个版本的ID号

git log   // 查看版本号
git reflog  // 所有版本号
git status 查看状态 `红色`   工作区

git status 查看状态 `绿色`   暂存区

git status  查看状态 `无色`   

远程仓库

  • .gitignore 文件会忽略 写入的文件
  • git不会上传空的文件
git remote add origin 地址 // https://gitee.com/你的码云用户名/testgit      //添加远程仓库
git push -u origin master
  • 线上和线下不一样的时候 先把线上拉下来 再push

工作中

  • 初始化 clone远程库 获得项目 会创立本地库
git clone  url

克隆指定分支

方式一、

注意:这个仅仅在第一次 clone 指定分支项目 用 后面 再次 拉其他分支 不能用这种方法

命令: git clone -b 分支名称 仓库地址

默认克隆master命令: git clone 仓库地址
#切换源地址
git remote set-url origin http://xxxxxx/xxx/pms-xxx.git/

#clone不同分支
git clone -b dev http://xxxxxx/xxxx/pms-xxx.git
方式二、

在这里插入图片描述

// 默认本地已经存在 项目
1、切换分支
 git checkout dev
2. 更新远程分支 到本地
 git pull origin dev
3、提交到远程分支
 git add .
 git commit -m 'xx'
 git push origin dev
 
 //-------------------->
git pull origin dev
等价于:
git fetch origin dev
git merge origin/dev

  • 注意 多人协作同时 每次在push 到远程库前 都先做一次 pull
    一、 把远程内容合并到本地
    二、核实本地内容是否和远程内容有冲突
git pull
git push

修复BUG 操作流程

1、当你接到一个修复一个bug的任务时,很自然地,你想创建一个分支来修复它,但是,等等,当前正在dev上进行的工作还没有提交。

2、并不是你不想提交,而是工作只进行到一半,还没法提交,预计完成还需1天时间。但是,必须在两个小时内修复该bug,怎么办?

3、幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
  git add .
$ git stash
Saved working directory and index state WIP on dev: f52c633 add merge

4、然后确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支;修复完成后,切换到master分支,并完成合并,最后删除分支;此时,你只需要回到dev分支上,你会发现现在的工作区是空的;

$ git checkout dev
Switched to branch 'dev'
 
$ git status
On branch dev
nothing to commit, working tree clean
  • 用git stash apply恢复,但是恢复后,git stash list 内容并不删除
    在这里插入图片描述
  • git stash drop来删除 用git stash pop,恢复的同时把stash内容也删了 再用git stash list查看,就看不到任何stash内容了

回退版本的恢复

  • 通过git log -g命令来找到需要恢复的信息对应的commit 版本号 可以通过提交的时间和日期来辨别
  • 通过git branch recover_branch commitid 来建立一个新的分支
  • 这样,就把到commitid为止的代码、各种提交记录等信息都恢复到了recover_branch分支上了

追踪问题并修复指定版本

现在,你已经决定要解决你的公司使用的问题追踪系统中的 #53 问题。
想要新建一个分支并同时切换到那个分支上,你可以运行一个带有 -b 参数的 git checkout 命令:

git checkout -b iss53

不小心把配置文件提交到仓库

  • 移除文件

1、要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除)
从工作目录中手工删除文件
2、然后再运行 git rm 记录此次移除文件的操作
推远程 强制更新

设置别名

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值