为了能够使用的Git版本控制,确保了Git的整合插件在启用设置/首选项 对话框(Ctrl+Alt+S)下的插件。
在为现有本地项目启用Git版本控制或从远程存储库克隆Git项目之前,请执行以下操作:
下载并安装Git。支持最低版本的Windows为2.4,Linux和MacOS为1.8.0.0。
在Settings / Preferences 对话框(Ctrl+Alt+S)中,选择Version Control | 在左窗格中Git并指定Git可执行文件的路径。
设置远程Git存储库的密码
每次与远程Git存储库交互时(例如,在拉取, 更新或推送操作期间),都需要授权。您可以配置IntelliJ IDEA以记住您的密码,这样您就不必在每次需要授权时都指定凭据。
在“ 设置” 对话框(Ctrl+Alt+S)中,选择“ 外观和行为” 系统设置| 密码 在左边。
选择IntelliJ IDEA如何处理Git远程存储库的密码:
在本机Keychain中:选择此选项以使用本机Keychain存储您的密码。此设置仅适用于MacOS和Linux。
在KeePass中:选择此选项以使用KeePass密码管理器来存储您的密码。使用KeePass密码管理器时,将使用主密码来访问存储个人密码的文件。一旦IntelliJ IDEA记住您的密码,除非您需要访问密码数据库,否则它不会要求它们。输入将用于访问 MasterPassword 字段中的c.kdbx文件的密码。
您可以在“ 数据库”字段中更改c.kdbx文件的默认位置。
要导入c.kdbx文件,请单击 并从下拉菜单中选择“ 导入 ”,或单击并指定包含密码的本地文件的路径。
如果要从数据库中删除现有密码,请选择“ 清除”。
重启后不要保存,忘记密码:如果要在关闭IntelliJ IDEA后重置密码,请选择此选项。
IntelliJ IDEA允许您签出(在Git术语克隆中)现有存储库并根据您下载的数据创建新项目。
从主菜单中,选择VCS | 从版本控制检出| Git,或者,如果当前没有打开任何项目,请从Version Control中选择Checkout Git在欢迎屏幕上。
在“ 克隆存储库”对话框中,指定要克隆的远程存储库的URL(可以单击“ 测试”以确保可以建立与远程的连接)。
在“ 目录”字段中,指定将创建将克隆远程存储库的本地Git存储库的文件夹的路径。
单击克隆。如果要根据已克隆的源创建IntelliJ IDEA项目,请在确认对话框中单击“ 是 ”。Git根映射将自动设置为项目根目录。
如果您的项目包含子模块,它们也将被克隆并自动注册为项目根目录。
除了克隆远程存储库之外,您还可以基于现有项目的源创建本地存储库。
打开要放在Git下的项目。
从主菜单中,选择VCS | 启用版本控制集成。
在打开的对话框中,从下拉列表中选择Git,然后单击“ 确定”。
打开要放在Git下的项目。
从主菜单中,选择VCS | 导入版本控制| 创建Git存储库。
在打开的对话框中,指定将创建新Git存储库的目录。
Git不支持外部路径,因此如果选择项目根目录之外的目录,请确保将创建存储库的文件夹也包含项目根目录。
在为项目初始化Git存储库之后,需要向其添加项目数据。
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 本地更改”选项卡。
通过按或从上下文菜单中选择“ 添加到VCS”, 将任何文件放在版本控制下的Unversioned Files更改列表中。您可以添加整个更改列表,也可以选择单独的文件。 Ctrl+Alt+A
您还可以从“ 项目”工具窗口将文件添加到本地Git存储库。选择要添加的文件,然后按 Ctrl+Alt+A或选择Git | 从上下文菜单中添加。
如果您为项目启用了Git集成,IntelliJ IDEA建议在Git版本控制下添加每个新创建的文件(您可以在Version Control | Confirmation下的Settings 对话框(Ctrl+Alt+S)中更改此行为。如果您希望某些文件始终保持无版本,您可以配置Git忽略它们。
有时您可能需要保留某些类型的文件无版本。这些可以是VCS管理文件,实用程序工件,备份副本等。
一旦你将文件添加到Git版本控制,忽略它将无效。您需要先将其从Git存储库中删除。
您可以通过IntelliJ IDEA忽略文件,IDE不会建议将它们添加到Git,并将它们突出显示为忽略。但是,由于这是在IDE端完成的,Git会将此类文件视为未版本控制,因此如果您需要在IntelliJ IDEA之外执行任何操作,或共享您的项目,还建议您添加要忽略的文件列表。在 的.gitignore文件(有关说明,请参阅https://git-scm.com/docs/gitignore)。
在Settings / Preferences 对话框中(Ctrl+Alt+S)选择 Version Control | 左窗格中的“ 忽略的文件 ”。
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 本地更改”选项卡。单击工具栏上的,然后选择“ 配置忽略的文件”。
单击工具栏上的“ 添加” 按钮。
忽略指定的文件:指定相对于项目根目录的文件名。
忽略下面的所有文件:指定相对于项目根目录应忽略其内容的目录。该规则以递归方式应用于所有子目录。
两个字符可用作通配符:
*
:替换任何字符串。
?
:替换单个字符。
例如,*.iml
将忽略具有IML扩展名的所有文件; *.?ml
将忽略所有扩展名以的文件ml
。
/
不支持 将通配符与斜杠()结合使用以将范围限制到某个目录。
IntelliJ IDEA允许您检查本地工作副本与项目的存储库版本相比的状态。它可以让您查看哪些文件已被修改,哪些新文件已添加到VCS,哪些文件未被Git跟踪。
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 本地更改”选项卡:
在默认变更表显示已被修改自上次与远程存储库(蓝色高亮显示)同步所有文件,并已添加到VCS,但尚未提交,但(绿色高亮显示)所有新文件。
该版本的文件,更改列表显示,已添加到项目中的所有文件,但不被Git的跟踪。
如果合并期间存在未解决的冲突,则“ 合并冲突”节点将显示在相应的更改列表中,并带有解决它们的链接:
有关更改列表的更多信息,请参阅将更改组更改为不同的更改列表。
您还可以在编辑器中修改文件时跟踪文件的更改。所有更改都会突出显示更改标记 ,这些更改标记显示在修改后的行旁边的左侧装订线中,并显示自上次与存储库同步以来引入的更改类型 。当您对存储库提交更改时,更改标记将消失。
您在文本中引入的更改采用颜色编码:
添加了一行。
线路改变了。
删除行时,左侧装订线中会显示以下标记: 。
您可以使用将鼠标光标悬停在更改标记上然后单击它时显示的工具栏来管理更改。工具栏与显示修改行的先前内容的框架一起显示:
您可以通过单击来回滚更改 (请注意,自上次修订以来对文件的所有更改都将被还原,而不仅仅是当前行),并通过单击来探索当前行的当前版本和存储库版本之间的差异 。
为了能够在您的Git项目上进行协作,您需要配置 从中获取数据的远程存储库,并在需要共享工作时进行推送。
如果您克隆了远程Git存储库,例如从GitHub克隆,则会自动配置远程,并且您不必在要与其同步时指定它(换句话说,执行pull或push操作时)。
Git为你克隆的遥控器提供的默认名称是origin。
但是,如果您基于本地源创建了Git存储库,则需要为其他贡献者添加一个远程存储库,以便能够将更改推送到该存储库,并且您可以共享工作结果。
当您准备通过选择VCS |来推送提交时, 调用Push对话框 Git | 推从主菜单,或按Ctrl+Shift+K。
如果到目前为止尚未添加任何遥控器,将显示“ 定义远程”链接而不是远程名称。单击它以添加遥控器。
在打开的对话框中,指定远程名称及其托管位置,然后单击“ 确定”。
在某些情况下,您还需要添加第二个远程存储库。这可能很有用,例如,如果您克隆了一个您没有写入权限的存储库,并且您要将更改推送到您自己 的原始项目的fork中。另一个常见的情况是,您已经克隆了自己的存储库,这是另一个人的项目分支,您需要与原始项目同步并从中获取更改。
从主菜单中,选择VCS | Git | 遥控器。在Git的遥控器 对话框打开。
单击工具栏上的“ 添加” 按钮或按Alt+Insert。
在打开的对话框中,指定远程名称和URL,然后单击“ 确定”。
要编辑远程(例如,更改已克隆的原始项目的名称),请在Git Remotes对话框中选择它,然后单击工具栏上的“ 编辑” 按钮,或按Enter。
要删除不再有效的存储库,请在Git Remotes对话框中选择它,然后单击工具栏上的“ 删除” 按钮,或按Alt+Delete。
在通过将更改推送到上游来共享工作结果之前,需要与远程存储库同步以确保项目的本地副本是最新的。您可以通过以下方式之一执行此操作:获取更改, 拉取更改,更新项目。
当您获取来自上游的变化,从作了自上次与远程仓库同步提交所有新的数据下载到本地副本。此新数据未集成到本地文件中,更改不会应用于您的代码。
提取的更改将存储为远程分支,这使您有机会在将它们与文件合并之前对其进行检查 。由于fetch不会影响您的本地开发环境,因此这是一种更新远程存储库所有更改的安全方法。
要获取更改,请从主菜单中选择VCS | Git | 抓取。
拉动从远程仓库变化为方便快捷方式获取并随后合并的变化。当您拉动时,您不仅可以下载新数据,还可以将其集成到项目的本地工作副本中。
要进行更改,请执行以下操作:
从主菜单中,选择VCS | Git | 拉。“ 拉动更改”对话框打开。
如果您的项目有多个Git存储库,请从Git Root下拉列表中选择要更新的本地存储库的路径 。
如果为存储库配置了多个远程数据库,请在“ 远程”下拉列表中选择要从中提取数据的远程数据库的URL 。
选择要从中获取更改的分支,然后合并到当前签出的分支中。
从“ 策略”下拉列表中,选择将用于解决合并期间发生的冲突的 合并策略。
无提交:如果您不希望IntelliJ IDEA自动提交合并结果,请选择此选项。在这种情况下,您可以检查它们并在必要时进行调整。
无快进:选择此选项可生成合并提交,即使合并已解析为快进(即仅更新了分支指针)。
Squash commit:选择此选项可在当前分支之上创建单个提交,而不是合并一个或多个分支。它产生工作树和索引状态,就好像真正的合并发生一样,但它实际上并没有提交或移动HEAD。
添加日志信息:如果希望IntelliJ IDEA使用除分支名称之外的正在合并的实际提交中的单行描述填充日志消息,请选择此选项。
单击“ 拉”以从所选远程存储库中获取并应用更改。
如果您有多个项目根,或者每次与远程存储库同步时想要从所有分支获取更改,您可能会发现 更新项目是一个更方便的选项。
执行更新操作时,IntelliJ IDEA 从所有项目根和分支获取更改,并将跟踪的远程分支合并到本地工作副本(相当于pull)。
如果您的项目包含子模块,并且它们位于分支上,则它们也将自动更新。
如果子模块处于分离的HEAD状态,则IntelliJ IDEA将调用git submodule update
,这将检查根存储库中引用的提交。这意味着仅当子模块中的子模块引用更改或添加了新的子模块时才会执行更新。
要更新项目,请执行以下操作:
1.从主菜单中,选择VCS | 更新项目或按Ctrl+T。“ 更新项目”对话框打开。
合并:选择此选项可在更新期间执行合并。这相当于运行git fetch
然后git merge
,或git pull --no-rebase
。
Rebase:选择此选项可 在更新期间执行rebase。这相当于运行git fetch
然后git rebase
,或者git pull --rebase
(所有本地提交都将放在更新的上游头之上)。
分支默认值:如果要为不同分支应用不同的更新策略,请选择此选项。您可以branch.
在.git / config 配置文件的部分中为每个分支指定默认更新类型。
使用Stash:选择此选项可在git存储中保存本地更改。如果您需要在IntelliJ IDEA之外应用具有隐藏更改的修补程序,这非常有用,因为它们是由Git本身生成的。
使用Shelve:选择此选项可将本地更改放入工具架。搁置由IntelliJ IDEA完成,搁置更改生成的补丁通常应用于IntelliJ IDEA中。
在将新文件添加到Git存储库或已经在Git版本控制下的已修改文件并且您对其当前状态感到满意之后,您可以共享您的工作结果。这涉及在本地提交它们以将存储库的快照记录到项目历史记录中,然后将它们推送到远程存储库以便其他人可以使用它们。
要调用“ 提交更改”对话框,请在“ 本地更改”视图中选择文件(或整个更改列表),然后单击 工具栏上的,或者在选择 的上下文菜单中选择“ 提交更改 ”; 或按Ctrl+K。
“ 提交更改”对话框列出自上次提交以来已修改的所有文件以及所有新添加的无版本文件。
输入提交消息,并在将所选文件提交到本地存储库之前选择希望IntelliJ IDEA执行的Before Commit操作。
您可以单击以从最近的提交消息列表中进行选择。
如有必要 ,请在Git部分中选择以下选项:
修改提交:如果要将本地更改添加到最新提交,请选择此选项(有关详细信息,请参阅 使用先前提交(修改提交)组合暂存更改)。
签名提交:如果您要签署提交以证明您将要签入的更改是由您做出的,或者您对您提交的代码负责,请选择此选项。
启用此选项后,将在提交消息的末尾自动添加以下行: Signed off:
单击“ 提交”按钮或将鼠标悬停在此按钮上以显示以下可用提交选项之一:
提交和推送:在提交后立即将更改推送到远程存储库。
您还可以按下Ctrl+Alt+K以从“ 提交”对话框中调用“ 提交”和“推送”操作 。
创建补丁: 根据您要提交的更改生成补丁。在打开的“ 创建修补程序”对话框中,键入修补程序文件的名称,并指定是否需要反向修补程序。
远程运行:运行您的个人构建。此选项仅在您登录TeamCity时可用。 有关详细信息,请参阅TeamCity插件文档。
即使项目中仅存在未版本控制的文件,也 可以调用“ 提交更改”对话框,例如从IntelliJ IDEA外部添加。
有时,当您进行与特定任务相关的更改时,还会应用影响同一文件的其他不相关代码修改。将所有这些更改包含在一个提交中可能不是一个好的选择,因为审查,还原, 挑选它们等等会更加困难。
IntelliJ IDEA允许您通过以下方式之一单独提交此类更改:
选择要在“ 提交更改”对话框中包含在提交权限中的修改后的代码块,并将其他更改保留为待处理状态,以便稍后提交。
在编辑代码时,将不同的代码块动态地放入不同的更改列表中,然后分别提交这些更改列表。
调用的提交更改对话框。
点击DIFF显示库版本和所选文件的本地版本之间的差异。
选中要提交的每个已修改或新添加的代码块旁边的复选框,并保留未选择的其他更改:
单击提交。未选中的更改将保留在当前更改列表中,以便您可以单独提交它们。
在推送更改之前,请与远程同步并确保存储库的本地副本是最新的以避免冲突。
IntelliJ IDEA允许您将更改从当前分支上载到其 跟踪的分支或任何其他远程分支。
按Ctrl+Shift+K或选择VCS | Git | 从主菜单中按。该推提交对话框打开,显示所有Git仓库(多库项目),并列出所有犯当前分支取得了自上次推每个存储库。
如果您的项目使用多个不同步控制的存储库,则默认情况下仅选择当前存储库(有关如何启用同步存储库控制的详细信息,请参阅 版本控制设置:Git)。
如果存储库中没有遥控器,则会显示“ 定义远程”链接。单击此链接并在打开的对话框中指定远程名称和URL。它将被保存,您可以稍后通过VCS |进行编辑 Git | 遥控器 (有关详细信息,请参阅添加远程存储库)。
如果要修改要推送的目标分支,可以单击分支名称。标签变为文本字段,您可以在其中键入现有分支名称,或创建新分支。您还可以单击右下角的“ 编辑所有目标”链接以同时编辑所有分支名称。
请注意,您无法更改本地分支:将推送每个选定存储库的当前分支。
如果要在推送更改之前预览更改,请选择所需的提交。右侧窗格显示所选提交中包含的更改。您可以使用工具栏按钮来检查提交详细信息。
准备好后 单击“ 推送”按钮,然后从下拉菜单中选择要执行的操作: 推送 或强制推送。
这些选项仅在 启用了允许强制推送选项时可用(请参阅版本控制设置:Git),否则,您只能执行push
操作。
如果提交的作者与当前用户不同,则此提交将标记为星号。
如果推被拒绝,因为你的工作拷贝已经过时,IntelliJ IDEA的显示推送拒绝对话,前提是 如果当前分支的推动被拒绝自动更新的选项的Git设置的页面设置 对话框中没有被选中。请执行下列操作:
如果您的项目使用多个Git存储库,请指定要更新哪些存储库。如果要更新所有存储库,无论是否拒绝推送,请选择“ 更新未拒绝的存储库”选项。如果清除此选项,则仅更新受影响的存储库。
如果希望IntelliJ IDEA在下次使用您在此对话框中选择的更新方法拒绝推送时静默应用更新过程,请选择记住更新方法选项并在将来静默更新选项。
离开此对话框后,将选中“ 设置”对话框的Git设置页面中的“ 当前分支被按下时自动更新”复选框,并且应用的更新方法将成为默认方法。
要更改更新策略,请取消选择此选项以在下次拒绝当前分支时调用“ 推送已拒绝”对话框,应用其他更新过程,然后再次选择“ 记住更新方法选项”选项。
通过分别单击Rebase或Merge按钮 选择更新方法(rebase或merge)。
当您运行push时,如果远程存储库包含您缺少的更改并且您要使用存储库的本地副本覆盖,Git将拒绝完成操作。通常,在使用更改进行更新之前,需要执行pull以与远程同步。
该--force push
命令禁用此检查,并允许您覆盖远程存储库,从而删除其历史记录并导致数据丢失。
您可能仍需要执行的一种可能情况--force push
是,您重新推送推送的分支,然后将其推送到远程服务器。在这种情况下,当您尝试推送时,Git将拒绝您的更改,因为远程引用不是本地引用的祖先。如果你在这种情况下执行pull,你将得到两个你需要合并的分支副本。
如果您决定强制推送重新分支的分支并且您正在团队中工作,请确保:
没有人拉你的分支并对它进行了一些局部更改
所有挂起的更改都已提交并推送
您拥有该分支的最新更改
在IntelliJ IDEA中,您可以追溯项目中的所有更改。这有助于您找到任何更改的作者, 查看文件版本之间的差异,并在必要时安全回滚和撤消更改。
您可以查看对与指定过滤器匹配的项目源所做的所有更改。要查看项目历史记录,请打开“ 版本控制”工具窗口(Alt+9)并切换到“ 日志”选项卡。它显示了提交给所有分支和远程存储库的所有更改:
在多存储库项目中,左侧的彩色条带指示所选提交所属的根(每个根都标记有自己的颜色)。将鼠标光标悬停在彩色条纹上以调用显示根路径的提示:
通过输入完整提交名称或消息或其片段,修订号或正则表达式来搜索提交列表。
按分支或收藏分支,用户,日期和文件夹(或多根项目的根目录和文件夹)筛选提交。
单击工具栏上的Go to Hash / Branch / Tag 图标或按,Ctrl+F然后指定要跳转到的分支的提交哈希,标记或名称(您将进入该分支中的最新提交)。
单击箭头以跳转到长分支中的下一个提交:
按Left和Right键跳转到父/子提交。如果您在“ 日志”视图中提交了不同的存储库并且多个分支都已混合,则此功能尤其有用。
有关项目日志视图的更多详细信息,请参阅日志选项卡。
IntelliJ IDEA允许您在选定的版本中查看项目的状态:
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 日志”选项卡。
选择一个提交,然后从上下文菜单中选择“ 修订时浏览存储库”。
将打开 “ 存储库”工具窗口,其中包含所选修订版本中项目的快照。
您可以查看对特定文件所做的所有更改,并确定每个修订版中的确切修改内容。
在任何视图中选择所需文件(在“ 项目”工具窗口中,在编辑器中,在“ 版本控制”工具窗口的“ 本地更改”选项卡中,依此类推)。
选择Git | 从上下文菜单中显示历史记录。“ 历史记录”选项卡将添加到“ 版本控制”工具窗口,其中显示所选文件的历史记录,并允许您查看和比较其修订版本。
要确定在特定修订中引入了哪些更改,请在列表中选择它,然后按 Ctrl+D或单击工具栏上的按钮。在不同浏览器将打开,显示什么在这个文件的修订已经改变。
您可以检查已提交的文件修订版本与其本地版本的不同之处:
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 日志”选项卡。
选择您感兴趣的提交,然后在右侧窗格中选择该文件。
单击工具栏上的按钮。
IntelliJ IDEA的允许您查看如何变化合并从一个分支到另一个,以及如何准确冲突(如果有的话)是解决在合并过程中:
您可以通过使用VCS注释找出谁引入了对文件的更改 (对应于git-blame)。带注释的视图显示了每行代码的详细信息::
在当前版本中修改的行的注释用粗体和星号标记。
在编辑器或差异查看器中右键单击左侧装订线,然后从上下文菜单中选择“ 注释 ”。
您可以为Annotate命令指定自定义快捷方式:在Settings / Preferences 对话框中(Ctrl+Alt+S)选择左侧的Keymap并转到 Version Control | Git | 注释。
您可以在注释视图中选择要查看的信息量。
右键单击注释装订线,选择“ 查看”并选择要查看的信息类型,包括发生此更改的版本,日期,不同格式的作者姓名以及提交编号。
您还可以在“ 颜色”下设置突出显示。
右键单击注释装订线,然后从上下文菜单中选择“ 选项 ”:
忽略空格:空格将被忽略(git blame -w
)。这意味着注释将指向先前有意义的提交。
检测文件中的移动:当提交移动或复制同一文件中的行时,将忽略此类更改(git blame -M
)。这意味着注释将指向先前有意义的提交。
检测跨文件的移动:当提交移动或复制在同一提交中修改的其他文件中的行时,将忽略此类更改(git blame -C
)。这意味着注释将指向先前有意义的提交。
IntelliJ IDEA不仅可以注释当前文件修订版,还可以注释其以前的修订版。注释装订线的上下文菜单中提供了以下选项:
注释修订:如果要在提交特定更改后检查文件的外观,此选项很有用。
注释先前版本:如果您发现自己处于特定行中的最后一次更改毫无意义的情况下,此选项很有用,例如,如果所有更改都是代码格式。在这种情况下,您可以检查文件的先前版本是什么样的。
您还可以从“ 历史记录”视图中注释特定文件。在“ 历史记录”选项卡中,选择要查看的文件版本,右键单击相应的行,然后从上下文菜单中选择“ 注释 ”。
您可以将它们放在.patch文件中,而不是提交更改,以后可以将其应用于您的源,或者通过电子邮件发送,等等。
要基于未提交的更改创建修补程序,请执行以下操作:
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 本地更改”选项卡。
选择要根据其创建修补程序的文件或更改列表。
从上下文菜单或主VCS菜单中 选择“ 创建补丁”。
在打开的对话框中,确保选中要包含在修补程序中的所有更改,输入提交注释(可选)并单击“ 创建修补程序”。
在“ 修补程序文件设置”对话框中,根据需要修改默认修补程序文件位置,然后单击“ 确定”。
如果您不需要将补丁保存到文件中,并希望(例如)通过电子邮件或通过信使发送补丁,则可以从所选文件或更改列表的上下文菜单中选择“ 复制为补丁到剪贴板”,然后将其粘贴到邮件正文中。
您还可以根据已提交的更改创建修补程序。要从整个提交创建补丁,请在“ 日志”视图中找到它,然后从上下文菜单中选择“ 创建补丁 ”。如果需要在单个文件上创建补丁,并且相应的提交包含多个文件,请执行以下操作:
在任何视图中选择所需文件(在“ 项目”工具窗口中,在编辑器中,在“ 版本控制”工具窗口的“ 本地更改”选项卡中,选择一个子项)。
选择Git | 从主VCS菜单或选择的上下文菜单中显示历史记录。“ 历史记录”选项卡将添加到“ 版本控制”工具窗口。
右键单击修订并从上下文菜单中选择“ 创建修补程序 ”,或单击工具栏上的“ 创建修补程序”图标。
要将存储在文件中的更改应用于源,请执行以下操作:
选择VCS | 从主菜单应用补丁。
在打开的“ 应用修补程序”对话框中,指定要应用的.patch文件的路径。
如有必要,请单击“ 映射基目录”图标以指定相对于将解释补丁文件中的文件名的目录。您可以将基目录映射到单个文件,目录或选择。
如果在创建补丁后编辑了源代码,则可能会发生冲突。要检查是否可以在没有冲突的情况下应用修补程序,请单击“ 显示差异”图标或按Ctrl+D。如果存在冲突,相应的行将以红色突出显示。
如果要对修补程序中指定的文件中存储的文件应用更改,可以使用“ 条带目录”按钮去除前导目录。
选择要从列表中添加修补程序的现有更改列表,或在“ 名称”字段中指定新更改列表的名称,并可选择在此更改列表中输入注释。
如果要激活此更改列表,请选择“ 设置活动”选项。
如果希望IntelliJ IDEA在其停用时保留与新更改列表关联的任务的上下文,并在更改列表变为活动状态时还原上下文,请选择“ 跟踪上下文”选项(有关详细信息,请参阅管理任务和上下文)。
您还可以复制补丁文件内容并通过选择VCS |来应用它 从主菜单中应用剪贴板中的Patch。例如,当您通过电子邮件收到修补程序并且不想保存它时,这很方便。对于 Git格式补丁,IntelliJ IDEA提取提交消息和作者,并自动填写“ 提交更改”对话框中的相应字段。
您可以将它们放在.patch文件中,而不是提交更改,以后可以将其应用于您的源,或者通过电子邮件发送,等等。 处理功能,或冻结某个代码库的某个状态以进行发布等。
在IntelliJ IDEA中,所有带分支的操作都在Git Branches弹出窗口中执行。要调用它,请单击状态栏中的Git小部件,或者按,Alt+`然后选择其中的分支:
当前签出的分支的名称显示在状态栏的Git小部件中。
如果您有许多分支,则可以选择是要在分支弹出窗口中显示所有分支,还是仅显示收藏夹:在分支弹出窗口底部切换仅显示收藏夹和显示更多命令。
要将分支标记为收藏夹,请将鼠标光标悬停在分支名称上,然后单击左侧显示的星形轮廓: 。
默认情况下 ,主分支被标记为收藏夹。
在“ 分支”弹出窗口中,选择“ 新建分支”。
在打开的对话框中,指定分支名称,如果要切换到该分支,请确保选中Checkout分支选项。
新分支将从当前的HEAD开始。如果要从先前的提交而不是当前的分支HEAD启动分支,请在日志中选择此提交,然后从上下文菜单中选择“ 新建分支 ”。
如果您想在其他人创建的分支中工作,则需要检查它以创建该分支的本地副本:
在“ 分支”弹出窗口中,选择要从远程分支本地签出的分支,或者如果项目具有多个根并且 启用了同步分支控制,则选择“公共远程分支”,或者从“ 存储库”|“ 分支”中选择。远程分支(如果已禁用),并从可用操作列表中选择“ 校验”。
如有必要,请为此分支输入新名称,或保留与远程分支对应的默认名称,然后单击“ 确定”。
在多任务处理时,您经常需要在分支之间跳转以提交不相关的更改。
在“ 分支”弹出窗口中,选择要在“ 本地分支”下切换到的分支,然后从可用操作列表中选择“ 校验 ”(如果要修改本地分支名称,请选择“ 校验为”)。
如果您的工作树是干净的(即您没有未提交的更改),或者您的本地更改不与指定的分支冲突,则将检出此分支(IntelliJ IDEA窗口右下角会弹出一条通知)。
如果单击“ 强制结帐”,则会覆盖本地未提交的更改,您将丢失它们。
如果单击智能结账,IntelliJ IDEA将存储 未提交的更改,签出所选分支,然后取消暂停更改。如果在卸载操作期间发生冲突,系统将提示您合并更改。有关详细信息,请参阅解决冲突。
如果要检查两个分支如何相互分离,可以比较它们。
从“ 分支”弹出窗口中选择要与当前分支进行比较的分支,然后从可用操作列表中选择“ 比较 ”。
在打开的对话框中,“ 日志”选项卡显示一个分支中存在但在另一个分支中不存在的所有提交的列表。选择提交时,右窗格将显示受此提交影响的文件列表。您可以单击工具栏上的“ 显示差异”图标,以查看此提交中所选文件的更改方式。
“ 文件”选项卡显示两个分支之间存在分歧的所有文件的列表。单击 显示当前分支中所选文件与要与之比较的分支中的差异。
你已经经过整合的变化从一个特性分支纳入发展方式为主线,你可以删除你不再需要的分支:
调用分支弹出窗口并选择要删除的分支。
从子菜单中 选择“ 删除 ”。
删除分支后,会在右下角显示通知,您可以从中恢复已删除的分支:
如果分支包含尚未合并到其上游分支或当前分支的提交,它仍将立即删除(相当于git branch --D
或git branch --delete --force
命令),但通知还将包含允许您查看未合并提交的链接。
如果已删除的分支正在跟踪远程分支,则您还可以从此通知中删除远程分支。
如果您有一个多根存储库,则可以配置IntelliJ IDEA以在所有根上同时执行所有分支操作(例如检出,合并,删除等),就像它是单个存储库一样。如果某个操作至少在其中一个存储库中失败,则IntelliJ IDEA会建议您在存储成功的存储库中回滚此操作,从而防止分支出现分歧。
在Settings / Preferences 对话框中(Ctrl+Alt+S)选择Version Control | Git。
选择“ 对所有根目录执行分支操作”选项。
当您在团队中工作时,当有人将更改推送到您当前正在处理的文件时,您可能会遇到这种情况。如果这些更改不重叠(即,对不同的代码行进行了更改),则会自动合并冲突的文件。但是,如果相同的行受到影响,Git不能随意选择一侧而是另一侧,并要求您解决冲突。
在Git中,当您尝试执行以下操作之一时可能会出现冲突:pull, merge,rebase, cherry-pick,unstash changes或 apply patch。如果存在冲突,则这些操作将失败,系统将提示您接受上游版本,更喜欢您的版本或合并更改:
IntelliJ IDEA提供了一种在本地解决冲突的工具。该工具由三个窗格组成。左窗格显示只读本地副本; 右侧窗格显示签入存储库的只读版本。中央窗格显示了一个功能齐全的编辑器,其中显示了合并和解决冲突的结果。最初,此窗格的内容 与文件的基本修订版本相同,即从中派生两个冲突版本的修订版本。
单击“ 冲突”对话框中的“ 合并 ” ,或在编辑器中选择冲突文件,然后选择“ VCS”
要自动合并所有不冲突的更改,请单击工具栏上的 (应用所有非冲突更改)。您还可以使用 (从左侧应用非冲突更改)和 (从右侧应用非冲突更改)分别合并对话框左/右部分的非冲突更改。
要解决冲突,您需要选择要应用(接受或忽略 )左侧(本地)和右侧(存储库)版本的操作,并在中央窗格中检查生成的代码:
您还可以右键单击中央窗格中的冲突,然后使用上下文中的命令。在使用左解析和解析使用权的命令来接受从一侧变化和分别从对方忽略它们提供一个快捷方式:
对于简单冲突(例如,如果在不同的文件修订版中修改了同一行的开头和结尾),则可以使用Resolve simple conflicts 选项,该 选项允许在一次单击中合并更改:
“ 应用所有非冲突更改”操作无法解决此类冲突,因为您必须确保它们已正确解析。
比较不同版本以解决冲突也可能很有用。使用 工具栏按钮调用选项列表。请注意,Base指的是本地和存储库版本源自的文件版本(最初显示在中间窗格中),而Middle指的是生成的版本。
在中央窗格中查看合并结果,然后单击“ 应用”。
自动应用非冲突的更改
您可以将IntelliJ IDEA配置为始终自动应用非冲突更改,而不是通过“ 合并”对话框告知它执行此操作。为此,请在“ 设置/首选项” 对话框(Ctrl+Alt+S)中,转到“ 工具”| 在左侧进行差异合并,然后选择自动应用非冲突更改选项。
管理中央窗格中的更改
您可以使用将鼠标光标悬停在装订线中的更改标记上时显示的工具栏管理中央窗格中的更改,然后单击它。工具栏与显示修改行的先前内容的框架一起显示:
例如,当存在多个非冲突的更改,并且您只需要跳过其中的一个或两个时,使用“ 应用所有非冲突更改”操作同时应用所有这些更容易,然后使用从此工具栏还原操作。
通常,在团队中工作并为同一存储库做贡献的人使用不同的操作系统。这可能会导致与行结束的问题,因为Unix,Linux和MacOS的我们LF
,和Windows使用CRLF
来标记行的结束。
IntelliJ IDEA在差异查看器中显示行结尾的差异,因此您可以手动修复它们。如果您希望Git自动解决此类冲突,您需要 在Windows和Linux和MacOS上将core.autocrlf
属性设置为(有关更多详细信息,请参阅处理行结尾)。您可以通过在Windows或Linux和macOS上运行来 手动更改配置。true
input
git config --global core.autocrlf true
git config --global core.autocrlf input
但是,IntelliJ IDEA可以自动分析您的配置,警告您是否要提交CRLF
到远程存储库,并建议将core.autocrlf
设置设置为true
或input
取决于您的操作系统。
要启用智能处理LF
和CRLF
行分隔符,请打开“ 设置” 对话框(Ctrl+Alt+S),然后选择“ 版本控制” 左边的Git节点。如果要提交CRLF行分隔符选项,请启用警告。
启用此选项后,IntelliJ IDEA将在每次提交带分隔符的文件时显示行分隔符警告对话框CRLF
,除非您在受影响的文件中设置了任何相关的 Git属性(在这种情况下,IntelliJ IDEA假设您清楚地了解你在做什么,并从分析中排除这个文件。
在“ 行分隔符警告”对话框中,单击以下选项之一:
Commit As是忽略警告并使用CRFL
分隔符提交文件。
修复并提交将core.autocrlf
属性设置为true
或input
取决于您的操作系统。因此,CRLF
行分隔符将LF
在提交之前被替换。
如果稍后需要查看在合并期间如何解决冲突,可以在“ 日志”视图中找到所需的合并提交,在右侧的“ 提交详细信息”窗格中选择存在冲突的文件,然后单击或按Ctrl+D ( 有关详细信息,请参阅查看更改的合并方式)。
有时你需要在未完成的事情之间切换不同的任务,然后返回给他们。IntelliJ IDEA为您提供了几种方便地处理多种不同功能而不会丢失工作的方法:
您可以存储或搁置挂起的更改。
存储变化与搁置非常相似。唯一的区别在于生成和应用补丁的方式。Stas由Git生成,可以在IntelliJ IDEA内部或外部应用。具有搁置更改的修补程序由IntelliJ IDEA生成,也可通过IDE应用。此外,存储涉及所有未提交的更改,而当您将更改添加到工具架时,您可以选择一些本地更改,而不是将它们全部搁置。
您可以在不同的更改列表中保留与不同任务或功能相关的更改。
您可以创建分支以处理不同的不相关功能。
搁置暂时存储您尚未提交的挂起更改。这很有用,例如,如果您需要切换到另一个任务,并且您希望将更改设置为稍后处理它们。
使用IntelliJ IDEA,您可以搁置单独的文件和整个更改列表。
搁置后,可根据需要多次更改。
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 本地更改”选项卡。
右键单击要放入工具架的文件或更改列表,然后 从上下文菜单中选择“ 搁置更改 ”。
在“ 搁置更改”对话框中,查看已修改文件的列表。
在“ 提交消息”字段中,输入要创建的货架的名称,然后单击“货架 更改”按钮。
您还可以静默搁置更改,而不显示“ 搁置更改”对话框。要执行此操作,请选择要搁置的文件或更改列表,然后单击 工具栏上的“ 搁置静音”图标,或按Ctrl+Alt+H。包含要搁置的更改的更改列表的名称将用作货架名称。
为了避免使用相同名称的多个货架(例如Default),您可以将文件或更改列表从Local Changes选项卡拖到Shelf选项卡,等待一秒直到它被激活,然后编辑新货架释放鼠标按钮时即时命名。
令人不安的是将推迟的更改从一个架子转移到一个待定的更改列表。可以从视图中过滤掉未删除的更改或从工具架中删除。
在货架的标签的版本控制工具窗口中,选择要取消搁置一个变更或文件。
按Ctrl+Shift+U或从选择的上下文菜单中选择取消搁置。
在打开的“ 取消保护更改”对话框中,在“ 名称”字段中指定要将未经保留的更改还原到的更改列表。您可以从列表中选择现有的更改列表,也可以键入要创建的包含未更改的更改的新更改列表的名称。您可以在“ 注释”字段中输入新更改列表的说明(可选)。
如果要激活新的更改列表,请选择“ 设置活动”选项。否则,当前活动的更改列表仍保持活动状态。
如果希望IntelliJ IDEA 在其停用时保留与新更改列表关联的任务的上下文,并在更改列表变为活动状态时还原上下文,请选择“ 跟踪上下文”选项(有关详细信息,请参阅任务和上下文)。
如果要删除要撤消的更改,请选择“ 从架子中删除已成功应用的文件”选项。未加载的文件将从此工具架中删除,并添加到另一个更改列表并标记为已应用。在通过单击工具栏或从上下文菜单中选择Clean Already Unshelved明确删除之前,不会完全删除它们。
如果您意外删除了未受控制的文件,则可以从“ 最近删除”节点查看和还原它们。
单击确定。如果修补版本与当前版本之间发生冲突,请按照解决冲突中的说明解决它们 。
您可以静默取消更改,而不显示“ 取消保护更改”对话框。要做到这一点,选择文件或要取消搁置一个变更,并单击取消搁置默默的图标 工具栏,或按上 Ctrl+Alt+U。未被控制的文件将被移动到活动的待定更改列表。
您还可以拖动从一个文件或者一个变更货架标签的本地更改标签默默取消搁置了。如果按住该Ctrl键拖动它,它将被复制到“ 本地更改”选项卡,而不是从工具架中删除。
IntelliJ IDEA允许您在必要时重新应用未经保留的更改。所有未取消的更改都可以重复使用,直到通过单击工具栏上的图标或从上下文菜单中选择“ 清除已经取消保留”来明确删除它们。
确保已 启用“ 显示已取消已保留”工具栏选项。
选择要还原的文件或书架。
从选择的上下文菜单中,选择“还原”。
您可以导入在IntelliJ IDEA内部或外部创建的补丁,并将其作为搁置更改应用。
在货架的标签的版本控制工具窗口中,选择导入修补从上下文菜单中。
在打开的对话框中,选择要应用的修补程序文件。选定的修补程序将作为工具架显示在“工具 架”选项卡中。
使用修补程序选择新添加的工具架,然后 从选择的上下文菜单中选择“ 取消保护更改 ”。
将IntelliJ IDEA配置为始终搁置Git版本控制下的文件的基本修订版可能很有用。
在“ 设置/首选项” 对话框(Ctrl+Alt+S)中,选择“ 版本控制” 架子。
在分布式版本控制系统选项下 选择文件的Shelve基本修订版。
如果启用此选项,则文件的基本修订将保存到将在3向合并期间 使用的工具架(如果应用工具架导致冲突)。如果禁用,IntelliJ IDEA将在项目历史记录中查找基本修订版,这可能需要一段时间; 此外,冲突架所基于的修订可能会丢失(例如,如果由于rebase操作而更改了历史记录)。
默认情况下,shelf目录位于项目目录下。但是,您可能需要更改默认的货架位置。这可能很有用,例如,如果您想要在清理工作副本时避免意外删除货架,或者您希望将它们存储在单独的存储库中,以便在您的团队成员之间共享货架。
打开“ 设置” 对话框(Ctrl+Alt+S)并选择“ 版本控制” 左侧的架子节点。
单击“ 更改货架位置”按钮,然后在打开的对话框中指定新位置。
如有必要,请选择“ 将搁架移动到新位置”选项以将现有搁架移动到新目录。
有时可能需要还原您的工作副本以匹配HEAD提交,但您不希望丢失已完成的工作。如果您了解到上游更改可能与您正在执行的操作相关,或者您需要进行一些紧急修复,则可能会发生这种情况。
存储涉及记录HEAD提交和工作目录(存储)的当前状态之间的差异。也可以隐藏对索引的更改。
Unstashing涉及将存储的存储应用于分支。
您可以将存储应用于现有分支或在其基础上创建新分支。
存储可以根据需要多次应用于您需要的任何分支,只需 切换到所需的分支即可。请记住:
在一系列提交之后应用存储会导致需要解决的冲突。
您不能将存储应用于“脏”工作副本,即具有未提交更改的工作副本。
从主菜单中,选择VCS | Git | 藏匿变化。
在打开的Stash对话框中,选择适当的Git根目录并确保签出了正确的分支。
在“ 消息”字段中,描述您要保存的更改。
要隐藏本地更改并将索引中暂存的更改带到工作树以进行检查和测试,请选择“ 保留索引”选项。
单击“ 创建存储”。
从主菜单中,选择VCS | Git | 解冻变更。
选择要应用存储的Git根目录,并确保签出了正确的分支。
从列表中选择要应用的存储。
如果要检查所选存储中受影响的文件,请单击“ 查看”。
要在应用后删除选定的存储,请选择“ 弹出存储”选项。
要同时应用隐藏的索引修改,请选择“ 恢复索引”选项。
如果要基于所选存储创建新分支而不是将其应用于当前检出的分支,请在“ 新分支”字段中键入该分支的名称。
要删除存储,请在列表中选择它,然后单击“ 删除”。要删除所有藏匿,请单击“ 清除”。
如果您有冲突,此操作可能会失败。发生这种情况是因为冲突存储在索引中,您无法再以原始状态应用更改。
当您处理多个相关功能时,您可能会发现将更改分组到不同的更改列表中非常方便。这种方法有其优点和缺点,而不是使用功能分支来处理多个任务。
优点:
您可以轻松地在不同的逻辑变更集之间切换,并将它们彼此分开提交。
与为相同目的使用分支不同,您可以手头进行所有更改,而无需在分支之间切换,如果您的项目非常大,可能需要一段时间。
测试不同功能如何协同工作很方便。
您可以在构建服务器上远程运行更改列表。
缺点:
虽然使用更改列表可能看起来比分支更轻量级,但它并不安全,因为在您提交并推送它们之前,您的更改没有备份。如果您的本地工作副本出现问题,您的所有更改都将丢失,因为它们不属于Git项目历史记录。
不可能对特征进行原子测试。
不可能在同一功能上进行协作。此外,除非您通过电子邮件发送包含更改的修补程序,否则您无法从不同的计算机中做出贡献,这可能不是很方便。
所有更改列表都显示在“ 版本控制”工具窗口的“ 本地更改”选项卡中。所有已修改的文件都会自动放入活动更改列表中,这是默认更改列表,除非您创建了另一个并使其处于活动状态。
要创建新的更改列表,请单击工具栏上的。
要激活非默认更改列表,请右键单击它并从上下文菜单中选择“ 设置活动更改列表”。
选择要移动的文件,然后从上下文菜单中选择“ 移动到另一个更改列表”。
如果要使用要放弃活动更改列表的更改来创建更改列表,请 选择“ 设置活动”选项。
如果希望IntelliJ IDEA记住您的上下文并在此更改列表变为活动状态时在编辑器中重新加载当前打开的文件,请 选择“ 跟踪上下文”选项。
Git中的一个分支代表了一个独立的开发线,因此如果您正在开发一个单独的功能,您希望在准备好分享工作结果并将其集成之前完成并进行测试master
,那么在功能分支中执行此功能是最好的解决方案。这样,您可以确保不会将不稳定的代码提交到项目的主代码库,并且可以在必要时轻松切换到其他任务。
优点:
与使用更改列表进行组更改相反,使用功能分支是安全的。在您对Git提交更改后,它们将成为Git项目历史记录的一部分,因此即使您损坏了工作树,也可以通过Git reflog恢复提交 。推送更改后,它们将被备份。
您可以开发并行的非相关功能并以原子方式对其进行测试。
当您在分支中完成开发后,您可以重新排序或压缩提交,以便您的历史记录线性且干净。
您可以轻松地在功能上进行协作,或者从不同的计算机上进行开发。
缺点:
在真正大型项目上切换分支可能需要一些时间。
一起测试相关功能并不是很方便。
您必须学习使用功能分支并将更改集成到主代码库中的工作流程。
使用功能分支并将更改集成到主代码库中有两种主要方法:
在合并选项
在重订选项
合并选项的主要好处是完全可跟踪性,因为提交合并到主代码库中保留其原始哈希和作者,并且属于一个功能的所有提交可以组合在一起。
此工作流适用于对主代码库提交更改涉及 拉取请求 或分层审批过程的项目,因为现有分支不会以任何方式更改。
这种方法的主要缺点是每次需要合并更改时都会创建无关的合并提交,这会严重污染项目历史记录并使其难以阅读。
为您的独立开发线创建一个分支。
在开发过程中提交您的更改。
将分支推送到远程存储库。这应该用于备份,以便您可以在不同的计算机上进行协作或工作。
当您需要执行与您的功能无关的工作时,请切换到其他分支。
对您的功能进行审核和测试,并进行必要的修复。
当您准备将工作结果集成到主分支(例如master
)时,请执行以下操作:
将您的功能分支合并到主代码库中。
删除功能分支。
推。
此选项的主要好处是,您可以获得清晰的项目历史记录,以便其他人阅读和理解。您的日志不包含merge
操作产生的不必要的合并提交,您将获得易于导航和搜索的线性历史记录。
在决定采用此工作流程时,您应该记住,rebase
在为原始要素分支中的每个提交创建新提交时,重写项目历史记录,因此它们将具有不同的哈希值,这会妨碍可跟踪性。
为您的独立开发线创建一个分支。
在开发过程中经常提交更改。
将分支推送到远程存储库。这应该用于备份,以便您可以在不同的计算机上进行协作或工作。
衍合你的特性分支上 master
不时。如果您的功能分支很长,那么这样做才有意义。这对以下内容很有用:
确保你的功能分支,master
不要太远。
当您最终将更改集成到主代码库中时,避免解决大量冲突。当你经常变换时,你可以迭代地解决冲突,并且不会因为长时间的差异而挣扎。
加快检查分支,因为分支之间的切换一旦充分发散就会变慢。
重新定位涉及以下步骤:
从远程获取更改,或 将更改拉入 master
分支。
将您的分支重新打开 master
。
强制将rebase
操作结果推送到功能分支。
切换到master
需要执行与功能无关的工作时。当您返回功能分支时,执行Checkout和Rebase to Current。
对您的功能进行审核和测试,并进行必要的修复。
功能完成后 执行Interactive Rebase。这允许您重新排序和压缩提交,以使您的功能分支历史看起来漂亮和干净。
当您准备将工作结果集成到主分支(例如master
)时,请执行以下操作:
结帐的master
分支。
合并你的分支master
。由于master
没有分歧,Git只会将指针移动到功能分支的最新提交,而不是创建新的合并提交(这称为快进合并)。
删除功能分支。
推。
在提交之前,您始终可以撤消在本地完成的更改:
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 本地更改”选项卡。
在活动更改列表中,选择要还原的一个或多个文件,然后从上下文菜单中选择“ 还原 ”,或按Ctrl+Alt+Z。自上次提交以来对所选文件所做的所有更改都将被撤消,并且它们将从“ 本地更改”视图中消失 。
IntelliJ IDEA允许您撤消当前分支中的最后一次提交(即HEAD):
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 日志”选项卡。
选择当前分支中的最后一个提交,然后从上下文菜单中选择“ 撤消提交 ”。
在打开的对话框中,选择一个更改列表,其中将移动要放弃的更改。您可以从“ 名称”下拉列表中选择现有的更改列表,也可以指定新更改列表的名称(默认情况下使用提交消息)。
如果要使用要放弃活动更改列表的更改来创建更改列表,请 选择“ 设置活动”选项。
如果希望IntelliJ IDEA记住您的上下文并在此更改列表变为活动状态时在编辑器中重新加载当前打开的文件,请 选择“ 跟踪上下文”选项。
如果将提交推送到受保护的分支,即不允许使用force --push的分支 (在Version Control | Git下的Settings / Preferences对话框(Ctrl+Alt+S)中配置受保护的分支),则无法撤消提交 。
如果您发现已推送的特定提交中存在错误,则可以还原该提交。此操作将导致新提交,该提交会反转您要撤消的提交的效果。因此,保留项目历史记录,因为原始提交保持不变。
在“ 日志”视图中找到要还原的提交,右键单击它,然后从上下文菜单中选择“ 还原 ”。“ 提交更改”对话框将打开,并显示自动生成的提交消息。
如果所选提交包含多个文件,并且您只需要还原其中一些文件,请取消选择您不想触摸的文件。
单击“ 提交”以提交一个更改集,该更改集将更改还原到此特定提交中的选定文件。
如果您发现一组最近提交中的错误并想要重做该部分,则可以将存储库回滚到特定状态。这是通过将当前分支HEAD重置为指定的提交(如果您不希望在历史记录中反映撤消,则可选地重置索引和工作树)来完成的。
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 日志”选项卡。
选择要将HEAD移动到其上的提交,然后从上下文菜单中选择“将当前分支重置为此处 ”。
Soft:所有提交之后提交的所有更改都将被暂存(即,它们将被移动到Local Changes视图,以便您可以查看它们并在必要时稍后提交)。
混合:将保留所选提交后所做的更改,但不会为提交暂存。
硬:在所选提交之后进行的所有更改都将被丢弃(分阶段和提交)。
保持:在所选提交之后进行的已提交更改将被丢弃,但本地更改将保持不变。
如果您需要还原单个文件而不是丢弃包含对多个文件的更改的整个提交,则可以返回到该文件的特定版本:
在任何视图中选择所需文件(在“ 项目”工具窗口中,在编辑器中,在“ 版本控制”工具窗口的“ 本地更改”选项卡中,等等)。
选择Git | 从主VCS菜单或选择的上下文菜单中显示历史记录。“ 历史记录”选项卡将添加到“ 版本控制”工具窗口,其中显示所选文件的历史记录,并允许您查看和比较其修订版本。
当您确定要回滚的修订版本后,在列表中选择它,然后从上下文菜单中选择“ 获取 ”。
Git允许您将标记附加到提交以标记项目历史记录中的某些点,以便将来可以引用它们。例如,您可以标记与发布版本对应的提交,而不是创建用于捕获发布快照的分支。
带注释标签的元数据包含创建它们的用户的名称,因此它们允许您检查放置它们的人员。
从主菜单中,选择VCS | Git | 标签
在打开的Tag对话框中,在Git Root下,选择要在其中标记提交的本地存储库的路径,并指定新标记的名称。
在“ 提交”字段中,指定要标记的提交。您可以输入提交哈希,或使用表达式,例如:( 有关详细信息,
请参阅Git 提交命名约定)。
在“ 消息”字段中输入一些注释以创建带注释的标记(如果它为空,则将创建常规标记)。
单击创建标记。
如果在“ 日志”工具栏的“ 快速设置”下启用“ 压缩参考视图”选项,则标记名称将隐藏在分支名称后面,并且不可见。
如果您在错误的提交上放置了标记,并且想要重新分配它(例如,指示发布版本的提交),请执行以下操作:
从主菜单中,选择VCS | Git | 标记。
在“ 标记”对话框的“ 标记名称”字段中,指定要重新分配的现有标记的名称。
选择“ 强制”选项。
在“ 提交”字段中,指定要移动标记的提交,然后单击“ 创建标记”。
打开“ 版本控制”工具窗口(Alt+9)并切换到“ 日志”选项卡。
单击工具栏上的Go To Hash / Branch / Tag图标,或按Ctrl+F。
输入标签名称(代码完成建议您键入时的标签名称),然后按Enter。
假设您标记了与带标记的发布版本相对应的提交,现在您要在该时间点查看项目的快照。您可以通过签出标记的提交来完成此操作。执行以下操作之一:
找到要签出的标记提交,右键单击它并从上下文菜单中选择 Checkout Revision。
调用分支弹出,单击Checkout Tag或Revision并键入标记名称(IntelliJ IDEA在您键入时提供匹配标记和修订的列表)。
请注意,此操作会导致分离的HEAD,这意味着您不再处于任何分支中。您可以使用此快照进行检查和实验。但是,如果要在此快照之上提交更改,则需要创建分支。
找到标记的提交,右键单击它并选择Tag
除非绝对必要,否则请避免修改具有多个贡献者的远程分支的历史记录,例如,如果您不小心推送了一些敏感数据。
Git允许您编辑项目历史记录。当您正在处理功能分支并想要将其清理并在与其他人共享之前使其看起来像您想要的方式时,这非常有用。例如,您可以编辑提交消息,将与相同功能相关的较小提交压缩在一起,或者将包含无关更改的提交拆分为单独的提交,将更改添加到先前的提交,依此类推。
如果您修改了其历史记录的分支位于远程存储库中,则会拒绝推送此类修改以防止数据丢失,因此您必须强制推送 更改。
您无法修改不允许的受保护分支的历史记录 (在“ 版本控制”|“Git”下push --force
的“设置/首选项”对话框(Ctrl+Alt+S)中配置受保护的分支。
如果您需要更改的唯一内容是提交消息,则可以在推送此提交之前对其进行编辑。
在“ 日志”视图中右键单击要编辑其消息的提交,然后从上下文菜单中选择“重 定位 ”,或按F2。
在打开的对话框中,输入新的提交消息,然后单击“ 确定”。
有时您可能提前过早而忘记添加一些文件,或者在最后一次提交时发现错误,而不创建单独的提交。
您可以使用Amend commit选项将 上次更改附加到上一次提交。因此,您最终只能使用一个提交而不是两个不同的提交。
在“ 本地更改”视图中选择要添加到上一个提交的更改,然后单击工具栏或按Ctrl+K。
在“ 提交更改”对话框中,在提交更改之前,在右侧选择“ 修改提交”选项。
如果您需要将更改添加到任何先前的提交而不是单独提交它们,则可以使用fixup
或squash
操作来执行此 操作。这两个命令都会 对所选提交附加阶段性更改,但处理提交消息的方式不同:
squash
将新提交消息添加到原始提交
fixup
丢弃新的提交消息,只保留原始提交的消息
这两个命令都需要rebase,因为它们会更改提交哈希值。
进行要附加到任何早期提交的更改(它们将显示在“ 本地更改”视图中)。
在“ 日志”视图中,右键单击要使用本地更改修改的提交,然后从上下文菜单中选择“ Fixup”或“ Squash Into ”。
如果您选择压缩更改,则在必要时修改提交消息。
单击Commit按钮上的箭头,然后选择Commit and Rebase。
Git允许您编辑项目历史记录,以便通过执行交互式rebase使其变得线性和有意义。这允许您在将更改从 功能分支集成到另一个分支之前,通过更改单个提交,更改其顺序,将提交压缩为一个,跳过包含无关更改的提交等来清理提交历史记录。
IntelliJ IDEA允许您在将更改应用于其他分支之前编辑当前分支中的一系列最近提交。
在“ 版本控制”工具窗口的“ 日志”选项卡中,选择要编辑的一系列提交中最早的提交,右键单击它并从此处选择“ 交互式重新生成”。
该交互式衍合将显示对话框包含当前所有分支即提交作了选择后提交的名单。
如果需要更改应用提交的顺序,请使用 和按钮。
使用“ 操作”列表将以下操作应用于提交(可用于Alt+Up/Down选择操作):
选择:按原样应用所选提交。
编辑:选择在应用之前编辑受此提交影响的文件。
跳过:忽略所选的提交,因此不会应用这些更改。
壁球:选择将所选提交与前一个提交相结合。两个提交的提交消息将合并,因此此操作将反映在分支历史记录中。如有必要,更改提交顺序,以便要添加更改的提交是列表中的前一个提交。
Reword:选择此选项可在应用之前编辑提交消息。
修复:选择此选项可将选定的提交与前一个提交相结合。修复提交的提交消息将被丢弃,因此此更改将在分支历史记录中不可见。如有必要,更改提交顺序,以便要添加更改的提交是列表中的上一个。
IntelliJ IDEA允许您在应用更改之前,在另一个分支的顶部重新绑定分支并编辑源分支历史记录。
从主菜单中选择VCS | Git | Rebase。
在“ 分支”字段中选择要重新绑定的分支,在“ Onto”字段中选择目标分支。
在“ 发件人”字段中,选择要从中将所选分支应用于新基础的提交。
确保互动选项被选中,并单击再次基于。
该交互式衍合将显示对话框包含当前所有分支即提交作了选择后提交的名单。
如果需要更改应用提交的顺序,请使用 和按钮。
使用“ 操作”列表将以下操作应用于提交(可用于Alt+Up/Down选择操作):
选择:按原样应用所选提交。
编辑:选择在应用之前编辑受此提交影响的文件。
跳过:忽略所选的提交,因此不会应用这些更改。
壁球:选择将所选提交与前一个提交相结合。两个提交的提交消息将合并,因此此操作将反映在分支历史记录中。如有必要,更改提交顺序,以便要添加更改的提交是列表中的前一个提交。
Reword:选择此选项可在应用之前编辑提交消息。
修复:选择此选项可将选定的提交与前一个提交相结合。修复提交的提交消息将被丢弃,因此此更改将在分支历史记录中不可见。如有必要,更改提交顺序,以便要添加更改的提交是列表中的上一个。
IntelliJ IDEA允许您直接从IDE 管理GitHub上托管的项目: 克隆存储库, 共享项目, 创建分支, 通过要点共享代码, 创建拉取请求以及 查看传入的拉取请求。
为了能够从GitHub上托管的存储库中检索数据数据,或共享您的项目,您需要在IntelliJ IDEA中注册您的GitHub帐户。
如果您不想在每次与远程同步时指定yor凭据或推送提交,则可以配置IntelliJ IDEA以保存您的帐户信息(请参阅配置密码策略)。
在Settings / Preferences 对话框(Ctrl+Alt+S)中,选择 Version Control | 左侧窗格中的GitHub。
单击添加帐户。
在打开的对话框中,指定您的GitHub服务器URL(github.com或企业实例)。
执行以下操作之一:
如果您已有令牌,请单击“ 输入令牌”链接并将其粘贴到那里。
如果要获取新令牌,请输入您的登录名和密码。如果启用了双因素身份验证,系统将要求您输入将通过SMS或移动应用程序发送给您的代码。
令牌必须在您的帐户权限中启用repo和gist作用域(请参阅了解作用域)。
在Settings / Preferences 对话框(Ctrl+Alt+S)中,选择 Version Control | 左侧窗格中的GitHub。
单击“ 添加帐户”,然后在打开的对话框中单击“ 注册Github”。
在打开的注册GitHub页面上注册您的帐户。
返回IntelliJ IDEA设置并指定您的凭据。
您可以在IntelliJ IDEA中使用多个GitHub帐户:例如,用于处理开源项目的个人帐户以及用于主要工作的公司帐户。
在Settings / Preferences 对话框(Ctrl+Alt+S)中,选择 Version Control | 左侧窗格中的GitHub。
使用该按钮可根据需要添加任意数量的帐户。
(可选)要将帐户设置为当前项目的默认帐户,请选择该帐户并单击 。如果设置了默认帐户,IntelliJ IDEA将不会要求您在GitHub上共享项目时选择要使用的帐户 ,重新 分叉, 创建拉取请求或创建要点。
您可以直接从IntelliJ IDEA克隆要贡献的存储库,并基于它创建新项目。
从主菜单中,选择VCS | 从版本控制检出| Git。
在“ 克隆存储库”对话框中,指定要克隆的存储库的URL。您可以从与您的帐户关联的所有GitHub项目列表以及您的帐户所属的组织中选择一个存储库。
在“ 目录”字段中,输入将在其中创建本地Git存储库的文件夹的路径。
单击克隆。如果要基于这些源创建项目,请在确认对话框中单击“ 是 ”。IntelliJ IDEA将自动将Git根映射设置为项目根目录。
您可以为正在本地开发的项目添加远程GitHub存储库,以便其他人可以查看或贡献它。
打开要共享的项目。
如果您已在IntelliJ IDEA中注册了GitHub帐户,则将使用这些凭据建立连接。
如果您尚未在IntelliJ IDEA中注册帐户,则会打开“ 登录GitHub”对话框。指定您的访问令牌或使用您的登录名和密码申请新令牌。
如果您不希望允许其他GitHub用户对您的存储库进行公共访问,则 可以选择“ 私有”选项(请注意,此选项对于免费帐户不可用)。
单击“ 共享”以启动新存储库并将项目源上载到该存储库。
您可以从IntelliJ IDEA跳转到文件的GitHub版本。IntelliJ IDEA检测当前处于活动状态的分支以及文件的最新版本,并在Web浏览器的相应提交中打开所选文件的GitHub副本。如果从编辑器打开GitHub文件版本,该文件也将自动滚动到当前行。
如果文件指向多个远程,则系统将提示您选择相应的存储库。
您可以直接从IntelliJ IDEA克隆要贡献的存储库,并基于它创建新项目。
从主菜单中,选择VCS | 从版本控制检出| Git。
在“ 克隆存储库”对话框中,指定要克隆的存储库的URL。您可以从与您的帐户关联的所有GitHub项目列表以及您的帐户所属的组织中选择一个存储库。
在“ 目录”字段中,输入将在其中创建本地Git存储库的文件夹的路径。
单击克隆。如果要基于这些源创建项目,请在确认对话框中单击“ 是 ”。IntelliJ IDEA将自动将Git根映射设置为项目根目录。
您可以为正在本地开发的项目添加远程GitHub存储库,以便其他人可以查看或贡献它。
打开要共享的项目。
如果您已在IntelliJ IDEA中注册了GitHub帐户,则将使用这些凭据建立连接。
如果您尚未在IntelliJ IDEA中注册帐户,则会打开“ 登录GitHub”对话框。指定您的访问令牌或使用您的登录名和密码申请新令牌。
如果您不希望允许其他GitHub用户对您的存储库进行公共访问,则 可以选择“ 私有”选项(请注意,此选项对于免费帐户不可用)。
单击“ 共享”以启动新存储库并将项目源上载到该存储库。
您可以从IntelliJ IDEA跳转到文件的GitHub版本。IntelliJ IDEA检测当前处于活动状态的分支以及文件的最新版本,并在Web浏览器的相应提交中打开所选文件的GitHub副本。如果从编辑器打开GitHub文件版本,该文件也将自动滚动到当前行。
如果文件指向多个远程,则系统将提示您选择相应的存储库。
如果您想要贡献给GitHub上托管的项目并且无法直接推送到该项目,请遵循以下工作流程:
创建要贡献的项目的分支。
克隆此fork以创建本地存储库。
更改原始项目的副本,提交并 推送它们。
当你准备共享你的工作成果,重订在主分支的原始项目当前HEAD你的叉子。这需要确保您的更改不会与创建fork后推送的新提交冲突。
创建拉取请求以建议您对原始项目的更改。
一叉就是你的一个GitHub的仓库,使您可以修改代码,而不会影响原项目的副本。
打开要在GitHub上分叉的项目,然后单击
将在您的帐户下创建原始项目的副本。要对此项目进行更改,您需要克隆它以创建本地存储库。
从主菜单中,选择VCS | Git | 重新启动我的GitHub fork。您的fork将被重新定位到您创建fork的原始项目的master分支中的HEAD提交。
Pull请求用于开源项目或某些公司工作流程中,以管理来自贡献者的更改,并在合并此类更改之前启动代码审查。
通过创建拉取请求,您可以告诉其他人您已经推送到GitHub存储库的更改,以便原始存储库的维护者可以检查您的更改,讨论它们并将它们集成到基本分支中。
从主菜单中,选择VCS | Git | 创建拉取请求。将 打开“ 创建拉取请求”对话框
在Base Fork下,指定要将拉取请求发送到的项目。从IntelliJ IDEA填充的列表中选择存储库,或单击Select Other Fork。
在“ 基本分支”下,指定目标项目中将应用更改的分支。单击“ 显示差异” 以查看将包含在拉取请求中的提交列表。要查看提交的详细信息,请选择它并切换到“ 版本控制”工具窗口的“ 日志”选项卡,您可以在其中查看所选提交,视图差异等中包含的文件列表。
在“ 标题”字段中指定拉取请求的名称,并可选择提供要通过请求应用的更改的说明。
如果您是项目维护者并且为项目配置了GitHub远程,则可以直接从IntelliJ IDEA查看传入的拉取请求:从主菜单中选择VCS | Git | 查看请求。
使用GitHub Pull Requests工具窗口:
按州,作者,受让人和日期过滤请求:
跳转到GitHub上的pull请求:选择一个pull请求,然后从上下文菜单中选择在GitHub上打开。
查看建议的更改与基本修订之间的差异:在右窗格中选择一个文件,然后按 Ctrl+D或单击。
根据传入的更改创建本地分支:选择拉取请求,然后从上下文菜单中选择“ 创建新的本地分支 ”。
如果您想要贡献给GitHub上托管的项目并且无法直接推送到该项目,请遵循以下工作流程: 使用Gists可以共享代码片段,整个文件甚至应用程序。在运行,调试或测试代码时,您还可以使用gists来保存和共享控制台输出。
每个要点都是一个可以被其他人克隆或 分叉的存储库。
在编辑器中选择代码片段,或在“ 项目”工具窗口中选择文件和文件夹。要将控制台输出保存到要点,请右键单击包含该输出的工具窗口或选项卡中的任意位置。
在选择的上下文菜单中,选择Create Gist。
在Create Gist对话框中,在Filename下指定gist的名称,然后输入要发布的代码的描述。
如果要创建公共要点,请确保取消选择此选项。公共要塞是可搜索的,它们出现在Discover中,人们可以浏览新出现的要点。如果您希望其他人能够查找和查看您的代码,请使用公共要点。
创建要点后,您无法将其从秘密转换为公共,反之亦然。
如果要在默认浏览器中打开新创建的要点,请选择“ 在浏览器中打开” 选项,然后单击“ 确定”。