IDEA中Git相关 *** 作最详细解析

IDEA中Git相关 *** 作最详细解析,第1张

一、Compare with Local
  • 选择当前分支:比较的是当前分支 index暂存区(绿色新建,蓝色修改)和当前版本库的代码

  • 选择其他分支:比较的是当前分支 index暂存区(绿色新建,蓝色修改)+ 版本库 和其它任意分支任意版本,远程版本库任意分支任意版本的代码

  • 情况1:暂存区为空

    • 此处新建了两个TestStream2,TestStream3,并未加入暂存区(idea中为红色)

      git add --ignore-errors -A -- src/main/java/com/cx/domain/TestStream3.java src/main/java/com/cx/domain/TestStream2.java
      
      从暂存区删除:
      git rm --cached -f -- src/main/java/com/cx/domain/TestStream3.java src/main/java/com/cx/domain/TestStream2.java
      
    • 选择当前分支的版本库比较,显示并无差异

情况2:修改了一个文件,暂存区不为空

  • 我修改TestStream(idea默认不会加入index暂存区,但过一会会自动加入暂存区或直接手动command+S保存,默认就会加入暂存区)

    将TestStream恢复回版本库的最新版本,(IDE中Rollback *** 作)
    git checkout HEAD -- src/main/java/com/cx/domain/TestStream.java
    
  • 比较还是无差异,等加入了暂存区就有了差异

情况3:新建文件并加入暂存区,同时修改一个已存在的文件

  • 将TestStream2加入暂存区,并修改TestStream也将其加入暂存区,显示出差异
  • 选中TestStream(这是修改的文件),点击get,获取TestStream单个文件的本地版本库的版本,会覆盖工作区以及暂存区,下图123
  • 如果选中TestStream2(新建的且加入暂存区的文件),点击get,工作区及暂存区都会消失,因为版本库中没有此文件,下图456
  • 注意:get会直接拉取对应比较的版本文件,不会产生merge,直接覆盖!!!

二、Compare with Branch
  • 比较当前分支的index暂存区+当前版本库 和其他版本库(本地版本库的其它分支,远程版本库的任意分支)最新版本的差异

情况1:单个文件比较

​ 此处修改了TestStream,暂存区加入TestStream2,比较TestStream

情况2:比较多个文件

​ 此处修改了TestStream,暂存区增加TestStream2

三、Compare with Current
  • 比较选中的分支(本地版本库中当前分支之外的其他分支,远程版本库的任意分支)与当前分支版本库的差异(版本号的差异,哪怕文件内容一致)

此处修改了TestStream,暂存区增加TestStream2,并没有对比较产生影响

四、Show Diff With Working Tree
  • 比较选中分支(本地版本库的任意分支,远程版本库的任意分支)的版本库的最新版本与当前分支暂存区+版本库的差异

相当于Compare with local,不过它只是最新版本的比较

五、Show diff
  • 单个文件的比较,当前分支选中文件的暂存区和当前分支版本库的最新版的比较

六、Compare with Revision
  • 比较是当前分支暂存区和当前分支版本库不同版本的差异(单个文件或多个文件)

七、Rollback

此处修改TestStream文件并加入暂存区,将新增文件TestStream2加入暂存区

rollback直接回退所有的修改,TestStream2从暂存区删除,TestStream修改回退到和版本库一致

此时相当于执行了两个命令:

git rm --cached -f -- src/main/java/com/cx/domain/TestStream2.java
git checkout HEAD -- src/main/java/com/cx/domain/TestStream.java

八、Reset HEAD

此处修改TestStream文件并加入暂存区,将新增文件TestStream2加入暂存区

Reset Type:默认mixed

soft:保留工作区,并把重置 HEAD 所带来的新的差异放进暂存区,加入暂存区的还在暂存区

git reset --soft HEAD --

mixed:保留工作区,清空暂存区,已加入暂存区的新建文件删除放回工作区,修改的文件也放回工作区,修改差异依然存在(idea中默认保存,修改的还 会默认加入暂存区)

git reset --mixed HEAD --

hard:清空工作区和暂存区,退回到和版本库一模一样(新增的文件若没有加入到暂存区,就一直还在工作区中,若新增并且加入了暂存区,hard就会删除 掉,修改的文件则只是会回退到和版本库一致)

git reset --hard HEAD --

可参考这个文章

To Commit:默认HEAD(版本库中最新的版本)

HEAD^:倒数第二个版本

HEAD^:倒数第三个版本

以此类推。。。。

也可以直接输入版本号,推荐!

九、Reset Current Branch to Here

相当于Reset HEAD的简化版和拓展版,在Git log中直接定位 *** 作,可以回退到本地任意分支的任意版本,远程仓库的任意分支的任意版本

相当于命令(此处已mixed为例):

git reset --mixed 42912bc1ef73083c9a5890f42b2ae471b1b60c15

此处修改TestStream文件并加入暂存区,将新增文件TestStream2加入暂存区

此处Reset Type除了soft、mixed、hard还多了一个keep

keep对比hard,会产生merge,但是本地更改会保留(工作区和暂存区),新建的且加入暂存区的文件扔在暂存区,修改的文件也在暂存区且是merge后的结果,相当于soft+mixed的结合体

十、Undo commit

撤消当前分支中的最后一次提交

对于修改的文件,本地修改还在,且在暂存区中

对于新增的文件,退回到暂存区中

十一、Compare with Versions

比较同一分支中不同版本的差异

十二、Revert Commit

回退所选择的版本的提交,同时会有记录产生

修改的文件暂存区有变动无法revert,Stash或Commit后即可

此处选择版本【8】,成功后就回到了【7】版本

十二、Drop Commit

直接删除此版本,回退到上一个版本,相当于Reset hard,工作区暂存区都没了

十三、Stash Changes

当本地代码有改动,拉取代码,切换分支会失败,此时可以Stash Changes,然后拉取代码或切换分支,最后UnStash Changes,对于差异还会产生merge

十四、Cherry-Pick

将选中分支的某一个版本merge到当前分支

十五、Interactively Rebase from Here

十七、Shelve Changes

作用同Stash Changes

区别在于

  • stash changes… 是 git 原生的
  • shelve changes… 是 idea 独有的
十八、patch

第一个补丁,可以从本地change中也可以从提交版本中,补丁存于本地或直接用剪切板

应用补丁即可

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/735007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-27
下一篇 2022-04-27

发表评论

登录后才能评论

评论列表(0条)

保存