• 深入学习git


    1、git原理及整体架构图

    在这里插入图片描述
    一些常用的命令
    git add . 或 git add + src/com/ygl/hello/hello.java 指定文件
    git commit . 或 git commit + src/com/ygl/hello/hello.java 指定文件
    git push origin 分支名称

    2、git stash的应用场景

    场景一:你正在当前分支A开发,开发到一半,需要切换到分支B去修改bug
    方法一:(紧急情况)
    ① git stash
    ② git checkout B,在B分支处理完成后
    ③ git checkout A ④ git stash pop
    方法二:(不紧急情况) 先开发完成A分支并且提交,后切过去B分支解决bug

    场景二:代码开发完成了,准备提交
    ① git stash
    ② git pull
    ③ git stash pop
    ④ 本地可能出现冲突情况,如果冲突的直接解决就好
    ⑤ git commit -m “注释”
    ⑥ git push origin 分支名字

    关于git stash一些常用命令
    存(入栈)
    git stash
    git stash save + “注释”

    取(出栈)
    git stash pop + stash@{0}
    git stash apply + stash@{0}
    说明:如果apply是获取栈的信息,但是步删除栈,pop会删除栈顶,如果pop上面有栈压着,他的效果跟apply一样,都不会删除栈

    清理
    git stash drop +stash@{0}
    git stash clear 清楚所有栈

    查看
    git stash list 查看所有栈
    git stash show + stash@{0} 查看某个栈

    3、理解rebase与merge的区别

    rabase(变基): 原来节点的版本版本号会改变
    merge(合并):原来节点保留,新增一个节点去合并
    实现的目的是一样的,只是展现形式或者场景不一样

    4、各种场景的代码回滚方式

    ① 在工作区
    git checkout + 分支名称
    ② 在暂存区
    git reset HEAD + commit_id
    git checkout + 分支名称
    ③ 在本地仓库(见第7点)
    git reset --soft + commit_id 回退后,代码存放在暂存区
    git reset --mixed + commit_id 回退后,代码存放在工作区
    git reset -hard +commit_id 回退后,直接删除代码了

    5、smart checkout与force checkout区别

    smart checkout :会把冲突的这部分代码带到目的分支
    force checkout : 不会把冲突带到目的分支,但是会删除当前分支新增的东西

    6、如何撤销已经push到远程的修改,及撤销错如何恢复

    撤销:
    ① 找要回退到的版本号 :git log
    ② 回退:git reset --soft 4cf2621742ae2beac4e54533df63037e6dfadb18
    ③ 强推:git push origin ygl02 --force

    需要注意的是:别人在你撤销前拉取你需要回退的代码,如果别人再次提交,会导致代码恢复
    解决办法:① 让别人提交代码再去解决, ② 你解决后让别人再次拉取最新代码再做提交

    恢复:
    ① 通过 git reflog找到原来的版本
    ② 跟上面的②③过程一样

    git中reset和revert的区别是什么
    区别:
    1、reset是彻底回退到指定的commit版本,该commit后的所有commit都将被清除;而revert仅是撤销指定commit的修改,并不影响后续的commit。
    2、reset执行后不会产生记录,revert执行后会产生记录。

    使用:git revert +commit_id -> git push origin ygl01
    还原:git revert --abort

    7、理解soft、mixed,hard区别

    从本地仓库回退到不同的地方
    git reset --soft + commit_id 回退后,代码存放在暂存区
    git reset --mixed + commit_id 回退后,代码存放在工作区
    git reset -hard +commit_id 回退后,直接删除代码了

    8、git status 、git log 、 git reflog的使用

    git status 查看文件的提交状态
    git log 查看提交版本日志
    git reflog 查看所有版本提交日志(包括回退的版本)

    9、如何查看本地分支与远程分支,及当前选中的分支

    查看本地分支
    ① git branch 注:有*号表示当前分支
    ② git branch -v 包括一些当前版本号等信息

    查看远程分支
    ① git branch -r
    ② git brean -rv

    查看所有分支信息
    git branch -a

    10、IDEA中用Terminal进行git commit输入中文再进行修改时出现乱码的问题解决

    第一步:

    # --注释:该命令表示提交命令的时候使用utf-8编码集
    git config --global i18n.commitencoding utf-8
    # --注释:该命令表示日志输出时使用utf-8编码集显示
    git config --global i18n.logoutputencoding utf-8 
    
    • 1
    • 2
    • 3
    • 4

    第二步:LESSCHARSET=utf-8
    在这里插入图片描述
    第三步:重启idea

    11、查看当前提交的文件

    git show --name-only 只看名字
    git show; 看全部

    12、git pull和git pull --rebase的区别和使用

    使用下面的关系区别这两个操作:
    git pull = git fetch + git merge
    git pull --rebase = git fetch + git rebase

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

    差距就在git fetch之后的合并操作,合并操作有两种方式: git merge和git rebase

    13、git clone、git pull和git fetch的用法及区别

    git clone:克隆的是整个远程库。
    git clone https://github.com/tensorflow/tensorflow.git

    git fetch:克隆的是远程库的一个分支。
    git fetch更新本地仓库的两种用法:

    # 方法一
    $ git fetch origin master                #从远程的origin仓库的master分支下载代码到本地的origin maste
    $ git log -p master.. origin/master      #比较本地的仓库和远程参考的区别
    $ git merge origin/master                #把远程下载下来的代码合并到本地仓库,远程的和本地的合并
    # 方法二
    $ git fetch origin master:temp           #从远程的origin仓库的master分支下载到本地并新建一个分支temp
    $ git diff temp                          #比较master分支和temp分支的不同
    $ git merge temp                         #合并temp分支到master分支
    $ git branch -d temp                     #删除temp
    git branch -D temp  #注意删除时,需要两次确认删除才会删除
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    git pull:是拉取远程分支更新到本地仓库的操作
    git pull的用法:

    $ git pull <远程主机名> <远程分支名>:<本地分支名>
    
    • 1

    举例:将远程主机origin的master分支拉取过来,与本地的branchtest分支合并。

    $ git pull origin master:branchtest
    
    • 1

    如果将冒号和后面的branchtest去掉,则表示将远程origin仓库的master分支拉取下来与本地当前分支合并。
    以上的git pull操作如果用git fetch来表示:

    $ git fetch origin master:brantest
    $ git merge brantest
    
    • 1
    • 2

    14、如何创建新的分支

    git branch dev

    以有的分支创建新的分支
    git checkout -b yourbranchname origin/oldbranchname

    15、cherry-pick学习

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

    16、git diff 没有点、两个点和三个点的区别(比较冷门,理解不了可以不看,看自己是否感兴趣)

    git 命令中的点总是让人有疑惑,在不同的地方有不同的意思,那git diff 中的点代表什么,有的不加点,有的两个点,有的三个点

    我首先要明确git log 和 git rev-list 一样都是表示的一个范围, git diff 的参数不是标识范围,就是标识两个commit 之间的差异,跟范围没有关系

    这里有两个commit foo 和 bar ,也可以是两个分支,如果是分支意味着要比较分支的head

    git diff foo bar: 比较 foo 和 bar两个commit点的差别
    git log foo…bar 等同于上面不加点 :比较 foo 和 bar两个commit点的差别
    git log foo…bar 等同于 git diff $(git merge-base foo bar) bar :比较的foo和bar merge base那个点(最近的共同的parent)和 bar
    还是上图说明更容易理解
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    和 git log 相比,git diff 是两个commit点的比较,不涉及范围,没有点和两个点代表直接比较,三个点代表从merge点开始比较
    在gitlab web页面上的diff 就是用的三个点的方式

    17、git diff,git log 三点 和 两点的区别(冷知识)

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

    18、一些配置公钥私钥配置涉及到的命令

    配置git ,打开Git Bash,添加用户名和邮箱(自己名字拼音):
    git config --global user.name “zhangshan”
    git config --global user.email “zhangshan@qq.com”
    git config --global core.autocrlf false
    ssh-keygen -t rsa -C “zhangshan@qq.com”
    然后按三次回车

    复制key到git平台上setting,也可以用命令cat id_rsa.pub
    在这里插入图片描述

  • 相关阅读:
    【智能优化算法】基于粒子群结合NSGA2算法求解多目标优化问题附Matlab代码
    【Ansys 2024 R1 】助力扩展AI支持的多物理场优势,重构用户体验
    MongoDB、Elasticsearch分组统计性能比较
    1.9、习题2-时延相关习题
    论文写作——结论的内容和类型
    脚本:批量修改语音后缀(比如flac转wav) + 对语音进行重采样
    SQL处理json数据
    C++ —— 命名空间
    【优化覆盖】基于matlab果蝇算法求解无线传感器覆盖优化问题【含Matlab源码 2215期】
    2022年软件设计师下半年真题解析(上午+下午)
  • 原文地址:https://blog.csdn.net/weixin_39270240/article/details/133465355