Git常用场景

目录

Git是什么

Git作用

咋实现的

ref:

git常用操作

分支相关

查看命令相关

常见场景

日常工作流场景

场景:

操作:

note:

将多个commit合并为一个commit场景

场景:

操作:

合并场景

场景:

操作:

note:

开发新功能场景

场景:

操作:

note:

版本回退场景

场景:

操作:

note:

暂存本地修改场景

场景:

操作:

note:

打补丁场景

场景:

操作:


Git是什么

分布式的版本控制工具,对文件变更过程的存储

  • 分布式的,不止远端,更在本地

版本控制有点类似改论文的时候,保存不同版本的论文,并在上面进行修改

毕业设计论文-初稿.doc

毕业设计论文-中稿.doc

毕业设计论文-终稿.doc

可以看到每一步修改的内容、时间、提交人

image-20210815173746856

Git作用

  • 多版本控制

  • 多分支控制

  • 多人协作

咋实现的

对象存储数据库(.git/objects目录),提交后生成的hash值是key,value是打包后的对象

Git 打包对象时,会查找命名及大小相近的文件,并只保存文件不同版本之间的差异内容。

Git 时常会自动对仓库进行重新打包以节省空间

ref:

Pro Git book

在线学习和使用的网站:https://learngitbranching.js.org/?locale=zh_CN

git常用操作

克隆项目: git clone 地址
拉取更新: git pull 
获取全部提交 git fetch --all
提交暂存区: git add .
提交本地仓库git commit -a -m "msg"
推送远端 git push origin bugfix:master
​
选取另外分支的提交到当前分支 git cherry-pick commitHash
合并分支 git merge branchName
合并分支(抛弃原分支 相当于续后面了)git rebase 
重新回到某个版本 git reset commitHash  --hard 强制恢复  --soft 默认
保存现场 git stash push -m "msg"
还原现场 git stash pop | git stash apply stashName | git stash drop stashName

分支相关

查看全部分支 git branch -a
新建并切换分支 git checkout -b <branchName>
删除分支 git branch -d <branchName>
删除远端分支 git push origin -d <branchName>

查看命令相关

查看提交全部记录git log --all
比较本地未commit的和目前版本的不同 git diff
查看本地未commit的文件 git status

image-20210815013351375

常见场景

日常工作流场景

场景:

刚入职,拿到新的项目

操作:

  1. 克隆项目:git clone 地址 (ssh方式需先配置公钥)

  2. 拉取小伙伴提交的代码:git pull

    1. git pull = git fetch (获取最新的记录) + git merge (合并分支)

    2. git pull --rebase = git fetch + git rebase

  3. 进行本地代码修改,修改完毕后将本地已修改的文件全部添加到暂存区 git add . 或者add 单个文件 git add 文件路径

    1. git diff 可以查看哪些文件有哪些变化(只能查看本地和当前commit的不同,也就是commit之前的)

    2. 查看add 了哪些:git status

  4. 将暂存区的文件 commit 到本地仓库 git commit -m "注释本次操作做了什么"

    1. 查看本地 commit 了什么:git log

  5. 将本地仓库的文件 push 到远端仓库 git push

note:

note: git add . 和 git add * 的区别

git add . 会将本地所有修改的文件全部加入暂存区,并且根据 .gitignore 做过滤

而 git add * 会将全部文件加入,不会在乎 .gitignore

note: git commit -a 相当于

git add . + git commit

注意:-a 只针对修改了的或者删除的,对于新建的仍需要 git commit

note: git log

-p --patch -n 显示n次提交中各个文件的差异

--stat 提交的简略信息 比如新增了多少 修改了多少 删除了多少

--pretty 展示提交历史 oneline 一行显示

--graph 日志以树的模样展示

image-20210810223650655

image-20210810224021343

将多个commit合并为一个commit场景

场景:

一次开发中可能会出现多次commit,合并成一个commit并提交,可以方便回滚之类的

操作:

  1. git rebase -i 进入交互页面

  2. 按照下面的介绍进行相应的改变

    1. r 使用并重新编写commit messgae

    2. f 使用并重新编写commit messgae

image-20210815015218612

合并场景

场景:

dev分支开发完毕且本地代码已全部push到远端仓库,上test分支,进行测试;

操作:

  1. 查看本地和远端全部分支 git branch -a

    1. 绿色的带*的是目前所处分支

  2. 切换分支 git checkout test

    1. git checkout 提交的hash值 可以回到某个提交

  3. 合并分支 git merge dev

  4. 若出现conflict,则需要解决冲突,也就是在本地将对方或者自己的代码保留或综合

    1. 其中<<<<<<HEAD到======= 中间的代表的是目前本地的

    2. git status 可以看到暂存区的文件以及状态

  5. 冲突解决完毕再次add commit push

image-20210810232530835

image-20210810233037565

note:

若只想复制某个分支上的部分提交,可以使用cherry-pick

image-20210815122207523

合并除了merge还有rebase,语法和merge相似,merge会保留原分支,rebase会将原分支丢弃

git rebase

--abort 会放弃合并,回到rebase之前的状态,之前提交的不会丢弃

--skip 将会引起commit的丢弃掉 ,也就是把你的commit丢掉

--continue 合并冲突

image-20210815022238063

git rebase之后就会变成一条直线,也就是bugfix07那条分支没了

image-20210815022254907

image-20210815023025845

开发新功能场景

场景:

新功能,新建一个分支进行操作

操作:

  1. 以某分支为基础,创建并切换至新分支:git checkout -b 新分支的名称 <远程分支名称>

  2. 新的分支上进行代码的编写,编写完成后 git add、commit、push

  3. push 的时候需要指明哪个分支到哪个分支 eg: git push origin bugfix20210810:dev

note:

版本回退场景

场景:

错误push或者新版本上线之后发现有问题需要进行回滚

操作:

  1. git log 找到需要回退的版本号

  2. 强制回退到指定的版本号 git reset --hard 版本号

  3. 强制推送(本地覆盖远端的 无需解决冲突) git push -f

    1. -f == -force 推送完成后,之后的版本就都看不见了,

    2. 可以通过git reflog 查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

note:

git reset 默认为 --soft

--soft 只回退了commit的代码,本地代码修改仍在,仍需commit push

--hard 彻底回退,本地的源代码完全变为上个版本的 只需push

错误的commit 只需要git reset

可以将其想象成一个指针,在一条直线上移动,直线上的每一个点都是你提交的版本

git log --all

可以查看所有分支的提交记录

暂存本地修改场景

场景:

本地正常开发过程中突发重大bug需要修复,只能暂存本地修改代码,进行bug的修复

操作:

  1. git stash push -m "save message" 将本地所作的修改暂存起来(add 未commit的)

  2. git stash list 查看本都暂存的记录

  3. git pop 恢复并删除本地的暂存

    1. git stash apply stash@{0} 不删除暂存记录的取出

    2. git stash drop stash@{0} 删除暂存的记录

    3. git stash show 可以看到有哪些改动 -p stash@{0} 可以看具体的改动

note:

git stash 将修改存在了 refs/stash 下,在 .git/log/refs/stash 可以看到全部stash记录

打补丁场景


场景:

多人协同开发,将自己的补丁(开发的部分代码)给到主开发者

操作:

  1. 生成补丁 git diff > test.patch | git diff 【commit sha1 id】 【commit sha1 id】 > 【diff文件名】

  2. 应用补丁 git apply test.patch

git apply --reject xxxx.patch

只应用不冲突的更改,未应用的更改会生成.rej文件,可以手动根据内容进行修改解决冲突,然后add commit push

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值