连接Git
搜索Git然后将你下载好的Git的文件目录位置给他弄进去就行
本地分支管理
分支管理通常是在IDEA的右下角找到
分支合并
1.概念
rebase和merge的区别
merge 是合并的意思,rebase是复位基底的意思
merge
- 合并将两个分支的历史合并成一条线。当你合并两个分支时,Git会创建一个新的“合并提交”(merge commit),它将两个分支的末端提交作为父提交。
- 合并保留了分支的历史结构,可以看到明显的分支和合并点,这有助于理解项目的历史发展过程。
- 使用场景:当你想要保留分支的完整历史,或者需要将特性分支合并回主分支时。
rebase
- 变基将一个分支上的提交“复制”并“重新应用”到另一个分支上。这会导致历史记录变得更加线性,因为变基操作会改变历史。
- 变基使得项目的历史看起来更加整洁,因为它避免了额外的合并提交,所有的提交都会在一条直线上。
- 使用场景:当你想要清理提交历史,或者在特性分支上应用主分支的最新更改时。
假设现在有一个test分支。
D---E test
/
A---B---C---F master
1.merge
会产生一个新的节点G,是将分支和master合并到同个节点
D--------E
/ \
A---B---C---F---G test , master
2.rebase
不会产生一个新的节点,而是将分支弄到主分支上
A---B---C---F---D*---E* test , master
2.案例:
1.在master上新开一个kkoneone分支并创建一个新类进行一些操作。
2.commit一下内容,把更改的内容和分支推送到远程仓库
回到主分支看是没有代码的,接下来的操作就是要把kkoneone分支合并到matser中
3.合并分支
在master主分支,点击kkoneone分支可以看到有这两条,选择上面那个,就是说把kkoneone这条分支rebase到master里面去
可以看到这时候master就已经有了kkoneone分支里的内容
然后进行push一下,这时候远程代码库的master分支也已经有了kkoneone分支上的代码
版本回撤
首先当前版本是这样的,“初始化”就是当前的版本
然后添加一语句,并commit和push提交为版本1
System.out.println("test2");
额外小知识:HEAD、master、origin/master的区别
HEAD
是当前工作目录的分支或提交的指针。master
是本地仓库中的分支,你可以直接在其上工作和提交。origin/master
是远程仓库中的master
分支的指针,用于比较和合并。
而此时我们不想要这个更改过后的版本,想跳回到之前的版本,不做任何代码的保存,就对你想要的版本右键(这里我跳回初始化这个版本)
根据自己的需求选择,这里我选择hard,意思就是你这个版本写的代码不会保存,直接回调到你想要的那个版本的代码(本地),但commit的版本还会存在
可以看到代码已经消失并且指针回到了上一次初始化的版本,但可以看到远程代码仓库的代码还没更改,远程仓库代码还是存在的
git reset中soft、mixed、hard、keep的区别
-
--soft:
- 使用
--soft
选项时,git reset
会将HEAD移动到指定的提交,但是不会修改索引(即暂存区)或工作目录。这意味着所有的更改都会保留在索引中,准备进行下一次提交。 - 这相当于重置了HEAD,但是保留了所有更改,以便你可以重新提交。
- 使用
-
--mixed(默认):
--mixed
是git reset
的默认行为。它会将HEAD和索引重置到指定的提交,但是不会改变工作目录。这意味着所有在索引中的更改都会被更新,但是工作目录中的更改仍然保留。- 这相当于重置了HEAD和暂存区,但是工作目录中的更改未受影响。
-
--hard:
- 使用
--hard
选项时,git reset
会将HEAD、索引以及工作目录全部重置到指定的提交状态。这将丢弃所有未提交的更改。 - 这相当于重置了HEAD、暂存区以及工作目录,使得当前的工作状态与指定的提交完全一致。
- 使用
-
--keep:
--keep
选项用于当存在本地提交时,你想要重置HEAD和索引到远程分支的状态,但又不想丢失本地的提交。它会尝试保持本地提交,即使它们在远程分支中不存在。- 如果本地提交可以安全地应用到远程分支上,
--keep
会重置HEAD和索引,但是保留本地提交。如果存在冲突,它会停止重置并允许你解决这些冲突。
额外小知识
问题:
如果这个时候不做任何更改单纯是进行push就会出现这个问题,是因为我们之前选择的那个方案只是改了本地仓库的代码,但远程仓库的代码没变,因此两边版本不一致导致无法push。(当和其他人协作开发的时候,别人push上去了的代码我们没有及时pull下来本地,这个时候我们push上去也是会有这个问题)
连接远程仓库
方法1本地项目推送到远程仓库
如果当前项目还没交给Git管理的则按照以下图所示先将项目交给Git管理
然后此时文件都会是红色的,这表明都还没有加入到缓存区,因此要先add一下
然后commit
可以看到文件都被加入进来了,然后填写一个备注信息之后就可以commit了
如果想按照模块来看的话可以选择这个
注意此时是master分支
此时他需要你填入一个URL,因此得先去GItHub上新建一个专属于这个项目的仓库
创建好后将这里的HTTPS或者SSH复制进去即可
这的意思就是说本地master分支会推送到远程origin的master分支上并连接上,我们直接push即可
这种情况不用惊慌,重启一下项目再来push即可
方法2 基于远程上已有的项目
项目交给Git管理后找到右下角的Git
按照以下步骤填入远程仓库URL,表示连接远程仓库
填入远程仓库名字和URL
至此我们就连接上了远程仓库,但还没有将本地分支和远程仓库分支连接起来
可以在右下角先打开当前分支,找到远程分支右键,选择从远程仓库新建一条分支,这时候命名一下然后本地那就会出现一条分支
当我们commit完之后push,之后就能看到那条分支已经连接上远程分支
本地分支
连接远程的那条分支
可以看到push完显示这样已经是本地分支已经连接上了远程分支
GItHub上也已经有这条分支。注意这种方法是在之前那条分支的基础上新增的,也就是说会保留之前项目的内容
本地克隆远程
本地拉取远程
方法1拉取人家的项目
从新建这个地方选择
然后将人家的地址的URL地址复制进去
Directory是该项目拉取下来后存在的位置
方法2 拉取自己仓库的项目
看到右上角的
选择要拉取的仓库名字