IDEA:Git相关
关于:merge、rebase、cherry-pick、应用独立更改、应用独立文件
参见:IDEA_Doc:apply-changes-from-one-branch-to-another
- merge:
- rebase:
- cherry-pick
:将某个 commit 应用到当前分支,会在 HEAD 新增一个 commit。
- 中文插件翻译为“优选”。
- Apply separate changes(应用独立更改):将某个 commit 的 changes 应用到当前分支,会反应在 ChangeList 中。
- Apply separate files(应用独立文件,
):将某个 commit 的 files 应用到当前分支,会反应在 ChangeList 中。
关于:Resolve conflicts(冲突解决)
参见:IDEA_Doc:resolve-conflicts
- “Non-Conflicting Changes”:仅在左侧(或右侧)新增、修改、删除的冲突内容;
- “Conflicting Changes”:同时在左右两侧修改过的冲突内容;
- 手动确定决解方案。
说明:
- 图标:
×
:忽略左/右侧;>>
:应用左/右侧,到当前冲突;
- 右键:
接受左侧
:接受左侧,用于当前冲突(但不忽略右侧);接受右侧
:…类上…使用左侧 解决
:接受左侧,用于当前冲突,并忽略右侧;使用右侧 解决
:…类上…自动解决
:综合左右,应用于当前冲突;忽略
:忽略当前冲突;(保持原样)
- 按钮:
接受左侧
:接受左侧,用于所有冲突,并完成冲突解决;接受右侧
:…类上…
关于:行末标识冲突
行末标识符:LF(Unix, Linux and MacOS),CRLF(Windows)
解决:
- 全局设置(通过命令):
# on Windows git config --global core.autocrlf true # on Linux and macOS git config --global core.autocrlf input
- 仓库设置(通过配置文件“.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 中设置; ——如果远程分支为“受保护分支”,则本地迁出时也为“受保护分支”;
操作对照:
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...)
可选择性地保留或丢弃:差异、本地更改:
注意:
- “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】;
【慎用!!!】
示例:
不能使用“强制推送”?
IDEA 不能对“受保护分支”(Git 相关设置中)进行强制推送。
“受保护分支”设置:
- 如上,删除或更改此处设置,则可以对 master 分支进行强制推送了。
FAQ
推送错误:“git@github.com: Permission denied (publickey).”
使用 IDEA 推送本地仓库到 GitHub 时,遇到错误:“git@github.com: Permission denied (publickey).”
错误信息:
- IDEA git:
- ssh 测试:
- ssh -T git@github.com:用于测试 SSH 到 GitHub 是否可用;
- ssh -vT git@github.com:用于测试 SSH 到 GitHub 是否可用,并会显示详细信息;
原因:推送到 GitHub 需要 SSH,当前未配置相关内容。
解决:
- 本地:
- 生成 SSH 密钥对:
- 由于本地已存储了其他密钥对(“id_rsa、id_rsa.pub”),所以此处修改了存储文件名;
- 新建 config 文件:
- 由于修改了密钥文件的名称(或位置),所以需要 config 文件(C:\Users\eijux\.ssh\)进行配置;
# github Host github.com HostName github.com PreferredAuthentications publickey IdentityFile C:\\Users\\eijux\\.ssh\\id_rse_github
- 生成 SSH 密钥对:
- Github:配置 SSH keys。
- SSH 测试: