Git在IDEA中相关操作最详细解析

一、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
      
    • 选择当前分支的版本库比较,显示并无差异

image-20210428104954186

image-20210428105401231

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

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

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

image-20210428121319053

image-20210428121554076

image-20210428121732298

image-20210428121919880

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

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

image-20210428122410221

image-20210428122504622

image-20210428122800968

image-20210429101236175

image-20210429101330971

image-20210429101520643

二、Compare with Branch

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

情况1:单个文件比较

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

image-20210503113323816

image-20210503113506647

image-20210503113654034

情况2:比较多个文件

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

image-20210503114011655

image-20210503114213190

三、Compare with Current

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

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

image-20210503120315520

image-20210503120411370

四、Show Diff With Working Tree

  • 比较选中分支(本地版本库的任意分支,远程版本库的任意分支)的版本库的最新版本当前分支暂存区+版本库的差异

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

image-20210503121217885

image-20210503121255511

五、Show diff

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

image-20210503122556444

image-20210503122631582

六、Compare with Revision

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

image-20210503123247687

image-20210503123853086

image-20210503123946228

七、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

image-20210503125500038

image-20210503125546222

image-20210503125651776

八、Reset HEAD

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

image-20210503130514582

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^:倒数第三个版本

以此类推。。。。

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

image-20210503130744677

image-20210503132839510

image-20210503133626588

image-20210503133823662

image-20210503134231867

image-20210503134350062

image-20210503134555536

九、Reset Current Branch to Here

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

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

git reset --mixed 42912bc1ef73083c9a5890f42b2ae471b1b60c15

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

image-20210503135357924

image-20210503135604013

image-20210503135912273

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

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

image-20210503141532132

image-20210503142040994

image-20210503142433173

image-20210503142655729

十、Undo commit

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

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

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

十一、Compare with Versions

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

image-20210503151428915

十二、Revert Commit

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

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

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

image-20210503154958119

image-20210503155132189

image-20210503155335712

十二、Drop Commit

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

十三、Stash Changes

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

十四、Cherry-Pick

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

image-20210503163221343

image-20210503163358803

十五、Interactively Rebase from Here

image-20210503164743511

image-20210503165634646

image-20210503165716428

image-20210503165851477

十七、Shelve Changes

作用同Stash Changes

区别在于

  • stash changes… 是 git 原生的
  • shelve changes… 是 idea 独有的

十八、patch

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

应用补丁即可

  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在IntelliJ IDEA,如果右键项目没有出现git选项,可能是由于以下几个原因导致的。 首先,确保你已经正确创建了git仓库。你可以通过以下步骤来创建一个正确的git仓库:在菜单栏选择VCS->Import into Version Control->Create Git Repository,然后按照默认设置进行操作。如果你更改了目录,可能会导致git选项没有出现。此时,项目的文件会显示为红色。你可以右键项目或者右键要添加到git的文件,查看是否出现git选项。另外,你还可以在菜单栏选择File->Version Control来查看项目的git仓库。在文件管理器,你可以找到一个名为.git的隐藏文件夹,这个文件夹是git仓库的标识。确保这个文件夹存在,这样问题就可以解决了。\[1\] 如果你已经正确创建了git仓库,但是仍然没有出现git选项,那么可能是git没有正确安装。你可以在菜单栏选择File->Settings->Version Control->Git来检查git的安装情况。如果git安装有问题,你可以尝试重新安装git并进行测试。\[2\] 希望以上解决方法能够帮助你解决问题。如果问题仍然存在,请提供更多详细信息,以便我能够给出更准确的解答。 #### 引用[.reference_title] - *1* *2* [idea右键项目没有出现git选项的解决方法](https://blog.csdn.net/boomxiaolong/article/details/95048380)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值