IDEA:Git相关

来自Wikioe
跳到导航 跳到搜索


关于:merge、rebase、cherry-pick、应用独立更改、应用独立文件

参见:IDEA_Doc:apply-changes-from-one-branch-to-another
  1. merge:
  2. rebase:
  3. cherry-pick IDEA:icons:cherryPick.svg:将某个 commit 应用到当前分支,会在 HEAD 新增一个 commit。
    • 中文插件翻译为“优选”。
  4. Apply separate changes(应用独立更改):将某个 commit 的 changes 应用到当前分支,会反应在 ChangeList 中。
    IDEA:Git:Apply separate changes.png
  5. Apply separate files(应用独立文件,IDEA:icons:get.svg):将某个 commit 的 files 应用到当前分支,会反应在 ChangeList 中。
    IDEA:Git:Apply separate files.png

关于:Resolve conflicts(冲突解决)

参见:IDEA_Doc:resolve-conflicts
IDEA:Git:Non-Conflicting&Conflicting Changes.png
  1. “Non-Conflicting Changes”:仅在左侧(或右侧)新增、修改、删除的冲突内容;
    • 可以通过:IDEA:icons:Apply All Non-Conflicting Changes.svgIDEA:icons:Apply Non-Conflicting Changes from the Left Side.svgIDEA:icons:Apply Non-Conflicting Changes from the Right Side.svg 来快速解决。
  2. “Conflicting Changes”:同时在左右两侧修改过的冲突内容;
    • 手动确定决解方案。


IDEA:Git:冲突解决.png

说明:

  1. 图标:
    • ×:忽略左/右侧;
    • >>:应用左/右侧,到当前冲突;
  2. 右键:
    • 接受左侧:接受左侧,用于当前冲突(但不忽略右侧);
    • 接受右侧:…类上…
    • 使用左侧 解决:接受左侧,用于当前冲突,并忽略右侧;
    • 使用右侧 解决:…类上…
    • 自动解决:综合左右,应用于当前冲突;
    • 忽略:忽略当前冲突;(保持原样)
  3. 按钮:
    • 接受左侧:接受左侧,用于所有冲突,并完成冲突解决;
    • 接受右侧:…类上…

关于:行末标识冲突

行末标识符:LF(Unix, Linux and MacOS),CRLF(Windows)

解决:

  1. 全局设置(通过命令):
    # on Windows
    git config --global core.autocrlf true
    
    # on Linux and macOS
    git config --global core.autocrlf input
    
  2. 仓库设置(通过配置文件“.gitattributes”):

关于:Shelve、Stash

参见:IDEA_Doc:work-on-several-features-simultaneously

Stash(保存工作现场)与 Shelve(搁置):

1、Stash 由 git 生成,可在 IDEA 内外使用;
   Shelve 由 IDEA 生成,在 IDEA 内使用。

2、Stash 将保存所有 uncommitted changes;
   Shelve 可以选择保存部分 uncommitted changes。

关于:Undo、Revert、Drop、Reset commit

参见:参见:IDEA_Doc:undo-changes.html


 关于“受保护分支”:
    ——本地“受保护分支”,可在 IDEA 中设置;
    ——如果远程分支为“受保护分支”,则本地迁出时也为“受保护分支”;

操作对照:

IDEA:Git:Option of commit.png

Undo(撤销)

“撤销上一次提交”(Undo the last commit),将会删除上一次的 commit,并将所有的更改保存到 Changelist。

注意:

  • 不能对“受保护分支”(protected branch)操作。(若“受保护分支”的最近一个 commit 是“Unpushed”的则可以)
  • 只能对“最近一次、未提交”的 commit 操作。

Revert(还原)

“还原推送的提交”(Revert a pushed commit),将会产生一个新的 commit,用于反转要撤消的提交的效果。
    
    【反向修改,并提交】——直接还原效果,而非将修改保存到 Changelist。

注意:

  • 可以对任意 commit(不必是最近一次,不一定是一个)进行 Revert。
  • 如果对多个 commit 进行还原,仍然生成一个 commit,实现所有还原效果。
  • “Revert Commit”时,Changelist 中不能有未提交(可以搁置修改后,再操作)。
如果选定的提交包含多个文件,而您只需要还原其中的一些文件,请取消选择不想接触的文件。

??? 没找到咋操作

Revert selected changes

“还原选中的更改”(Revert selected changes),用于还原 commit 中的一个或多个 file,但不会产生 commit。而是作为更改,反应在 Changelist。

Drop(删除)

“删除一个提交”(Drop a commit)。

注意:

  • 不能对“受保护分支”(protected branch)操作。(若“受保护分支”的最近一个 commit 是“Unpushed”的则可以)

Reset(重置)

“将分支重置为特定提交”(Reset a branch to a specific commit),将会重置分支到指定的某个 commit,之后的 commit 全部丢弃。


右键菜单为:“将当前分支重置为此处...”(Reset Current Branch to Here...)

可选择性地保留或丢弃:差异、本地更改:

IDEA:Git:Reset Option:“Reset Current Branch to Here...”.png


注意:

  • “Reset”不能被“Roll back”(Ctrl + Alt + Z)。
  • 丢弃的 commit,可以通过远程分支 pull、fetch、update 操作重新获取。
    • 但,若 Reset 之前有“Unpushed”的 commit,则无法找回。

关于:Edit Git project history

关于:“强制推送”

Git 的“强制推送”(git push --force-with-lease):强制推送本地分支到远程,将会忽略远程分支版本比本地高【即,抛弃比当前 commit 更高版本的 commit】;

【慎用!!!】

示例:

  1. 强制推送前:
    IDEA:Git:强制推送前.png
  2. 强制推送:
    IDEA:Git:强制推送.png
  3. 强制推送后:
    IDEA:Git:强制推送后.png

不能使用“强制推送”?

IDEA 不能对“受保护分支”(Git 相关设置中)进行强制推送。

“受保护分支”设置:

IDEA:Git:强制推送设置:“受保护分支”.png
  • 如上,删除或更改此处设置,则可以对 master 分支进行强制推送了。

FAQ

推送错误:“git@github.com: Permission denied (publickey).”

使用 IDEA 推送本地仓库到 GitHub 时,遇到错误:“git@github.com: Permission denied (publickey).”

错误信息:

  • IDEA git:
    IDEA:推送失败“git@github.com Permission denied (publickey)”.png
  • ssh 测试:
    SSH:测试连接git@github.com:失败.png
    • ssh -T git@github.com:用于测试 SSH 到 GitHub 是否可用;
    • ssh -vT git@github.com:用于测试 SSH 到 GitHub 是否可用,并会显示详细信息;
原因:推送到 GitHub 需要 SSH,当前未配置相关内容。

解决:

  1. 本地:
    1. 生成 SSH 密钥对:
      • 由于本地已存储了其他密钥对(“id_rsa、id_rsa.pub”),所以此处修改了存储文件名;
      C:\Users\eijux>ssh-keygen -t rsa -C "chen@eijux.com"
      Generating public/private rsa key pair.
      Enter file in which to save the key (C:\Users\eijux/.ssh/id_rsa): C:\Users\eijux/.ssh/id_rse_github
      ...
      
      SSH:生成github密钥对.png
      得到密钥对文件:“id_rse_github、id_rse_github.pub”;
    2. 新建 config 文件:
      • 由于修改了密钥文件的名称(或位置),所以需要 config 文件(C:\Users\eijux\.ssh\)进行配置;
      # github
      Host github.com
      HostName github.com
      PreferredAuthentications publickey
      IdentityFile C:\\Users\\eijux\\.ssh\\id_rse_github
      
  2. Github:配置 SSH keys
    1. 步骤:Setting -> SSH and GPG keys:“New SSH key”;
    2. 将本地生成的公钥“id_rse_github.pub”内容复制到 GitHub 的“New SSH key”;
      Github:添加 SSH key.png
  3. SSH 测试:
    ssh -T git@github.com
    # 或
    ssh -vT git@github.com
    
    SSH:测试连接git@github.com:成功.png