按照传统,我欢迎你们,未来的高级软件工程师。 今天我们将讨论我关于Git的文章的逻辑延续。我还建议阅读我之前发布的有关分支策略的材料。在有关 Git 的文章中,我描述了如何在命令行上使用它,今天我将向您展示如何在 Intellij IDEA 中完成这一切。在我作为一名开发人员的旅程开始时,我使用了命令行,并认为我不需要使用 UI 来处理这件事。毕竟,一切都清楚了……但那正是直到我开始在 Intellij IDEA 中使用 Git 的那一刻……我马上想说,我将描述我的个人经历。使用 Intellij IDEA 解决相同问题有多种选择,如果您知道如何更好地完成我在文章中描述的内容,请写在评论中,我们将进行讨论。
必要的介绍性说明:
- 阅读、重复并理解有关 git 的文章。这将有助于确保一切都已设置完毕并准备就绪。
- 安装 Intellij IDEA。
- 留出一个小时的个人时间来完全吸收。
将项目克隆到本地
这里有两个选择。- 如果你已经有一个 Github 帐户并且想稍后推送一些东西,最好将项目分叉给你自己并克隆你的副本。如何进行分叉 - 我在本文的章节中描述了分叉工作流程的示例。
- 从我的存储库克隆并在本地执行所有操作,而无法将整个操作推送到服务器上。毕竟,这将是我的存储库))
-
复制项目地址:
-
打开 Intellij IDEA 并选择从版本控制获取:
-
将地址复制并粘贴到项目中:
-
系统将提示您创建 Intellij IDEA 项目。我们接受报价:
-
由于没有构建系统,并且这不是本文的范围,因此选择从现有源创建项目:
-
接下来会有这样一幅油画: 我们已经整理好了克隆,现在我们可以四处看看了。
首先看一下 Intellij IDEA 作为 Git UI
再仔细看看克隆的项目:您已经可以在那里获得有关版本控制系统的大量信息。第一个是左下角的版本控制面板。在其中您可以找到所有本地更改并获取提交列表(类似于 git log)。让我们继续进行日志讲座。有一个特定的可视化组件有助于准确理解开发过程是如何进行的。例如,您可以看到创建了一个新分支,并向txt 添加了提交标头,然后将其合并到 master 分支中。如果单击某个提交,您可以在右上角看到有关该提交的所有信息:所有更改及其元数据。 此外,您还可以看到进行了哪些更改。而且,冲突在那里得到了解决。IDEA也完美地体现了这一点。如果双击在此提交期间更改的文件,我们将看到冲突是如何解决的: 值得注意的是,在右侧和左侧有同一文件的两个版本需要合并为一个。中间是最终结果。当一个项目有很多分支、提交以及在该项目中工作的用户时,需要按分支(branch)、用户(user)和日期(date)分别进行搜索: 而开始之前我要解释的最后一件事是如何理解我们在哪个分行。我给你一分钟时间去搜索...你找到了吗?你要放弃吗?:D 右下角有一个Git: master按钮,在 Git: 之后显示了项目当前所在的分支。如果单击该按钮,您可以执行许多有用的操作:移动到另一个分支、创建新分支、重命名现有分支等等。使用存储库
有用的热键
要继续工作,您需要记住一些非常有用的热键:- ctrl + t - 从远程存储库获取最新更改(git pull)。
- ctrl + k - 提交/查看当前可用的所有更改。这包括未跟踪和修改的文件(请参阅我关于 git 的文章,其中对此进行了描述)(git commit)。
- ctrl + shift + k是将更改推送到远程存储库的命令。所有在本地创建但尚未在远程提交的提交都将提供推送 (git Push)。
- alt + ctrl + z - 将特定文件中的更改回滚到本地存储库中最后创建的提交的状态。如果您在左上角选择整个项目,则可以回滚对所有文件的更改。
我们想要什么?
为了工作,我们需要掌握无处不在的基本脚本。任务是在单独的分支中实现新功能并将其推送到远程存储库(然后您需要为主分支创建另一个拉取请求,但这超出了我们文章的范围)。我需要做什么?-
获取当前主分支(例如 master)中的所有更改。
-
基于这个主要的,为您的工作创建一个单独的。
-
实施新功能。
-
转到主分支并检查您工作时是否有任何新的更改。如果不是,那么一切都很好,如果是,那么我们执行以下操作:我们转到工作分支并将主分支的更改重新设置为我们的分支。如果一切顺利,那就太好了。但很可能会发生冲突。并且可以提前解决它们,而无需在远程存储库上浪费时间。
看起来,为什么要这样做呢?这是一个良好形式的规则,它可以防止在将分支推送到本地存储库后出现冲突(当然,它们有可能仍然存在,但它会变得小得多)。
- 将您的更改推送到远程存储库。
从远程服务器接收更改?
我在自述文件中添加了新提交的描述,并希望收到这些更改。如果在本地和远程存储库中都进行了更改,则可以在合并和变基之间进行选择。选择合并。输入ctrl + t: 结果,您可以看到 README 发生了怎样的变化,即:来自远程存储库的更改已被拉出,在右下角您可以看到来自服务器的更改的所有详细信息。在master的基础上创建一个新分支
这里一切都很简单。-
转到右下角,点击Git: master,选择+ New Branch。
保留“结帐分支”复选框并写入新分支的名称。对我来说,这将是readme-improver。
之后,Git: master将更改为Git: readme-improver。
模拟并行工作
为了出现冲突,必须有人创建它们:D 我将通过浏览器使用新的提交来编辑自述文件,从而模拟并行工作。他们说有人在我工作期间对与我相同的文件进行了更改,这将导致冲突。我将从第 10 行删除“完全”一词。实现您的功能
任务是更改README并为新文章添加描述,即git中的工作是通过Intellij IDEA完成的。添加以下内容: 更改已完成,现在您可以创建提交。按热键ctrl + k,我们得到: 在创建提交之前,您需要仔细查看此窗口中提供的内容。我特意添加了一个箭头来告诉你该往哪里看。那里有很多有趣的事情。在“提交消息”部分中,我们编写提交的文本,要创建它,您需要单击“提交”按钮。我还没有找到如何使用热键来做到这一点,所以如果有人找到它,写下来,我会很高兴。我们写自述文件已更改并创建提交。结果,左下角会弹出一个警报,其中包含提交的名称:检查master分支是否发生变化
我们完成了任务,它有效,我们编写了测试,一切都很好。但在推送到服务器之前,需要检查一下主分支在这段时间是否有变化。怎么会发生这种事?很简单:有人在你之后被分配了任务,而这个人比你完成得更快。因此,我们转移到 master 分支。为此,您需要在右下角执行如下图所示的操作: 在 master 分支中,按ctrl + t从远程服务器获取其最新更改。如果您查看所做的更改,您可以很容易地注意到发生了什么: 如您所见,“完全”一词被删除了。也许是营销部门的人决定不能这样写,并给了开发人员更新它的任务。我们现在本地有最新版本的 master 分支。让我们回到readme-improver。现在我们需要将主分支的更改重新设置为我们的分支。我们这样做: 如果你正确地遵循了我的建议,结果应该是 README 文件中的冲突: 这里还有很多信息需要理解和吸收。这显示了存在冲突的文件列表(在我们的例子中是一个元素)。我们可以选择三个选项:- 接受你的 - 仅接受自述文件改进者的更改。
- 接受他们的 - 只接受来自主人的更改。
- 合并 - 自己选择保留什么和删除什么。
- 这些是来自 readme-improver 的更改。
- 结果。目前,它与更改之前相同。
- 来自 master 分支的更改。
将更改推送到远程服务器
下一步是将更改推送到远程服务器并创建拉取请求。为此,只需按ctrl + shift + k即可,然后我们会得到: 左侧将是尚未推送到远程存储库的提交列表,右侧将是所有已推送到远程存储库的文件改变了。就这样:点击Push,你就会高兴了:) 如果推送成功,右下角会有这样的通知:奖金部分
我最初并不想在文章中添加拉取请求的创建,但结果发现它并不是很完整。因此,我们转到 GitHub 存储库(当然,如果它是您的))))并看到 GitHub 已经知道要为我们提供什么: 单击Compare & pull request,然后单击Create pull request。由于我们提前解决了冲突,现在在创建拉取请求时,您可以立即合并它: 这就是我这次想告诉您的。当然,我只是打开门给你们看了一小部分。您将根据需要自行找到其余部分。像往常一样,我邀请您订阅我的GitHub 帐户,我在其中发布基于我在工作中使用的各种技术的项目。我最近取得了一项个人成就——我的项目已经得到了一百多个开发者的评级。有人使用你所做的东西是一种令人难以置信的喜悦感。并永远利用它。有用的链接
- JavaRush:Git 入门:初学者的详细指南
- GitHub:可供使用的演示项目
- JavaRush:分析 Git 中的分支策略
- JetBrains:设置 Git 存储库
- Habr:Git 变基
- GitHub:我的帐户
GO TO FULL VERSION