一、参考
A walk through the Magit interface
All you need to know about Git Merge vs Git Rebase in Examples
二、基本使用
2.1 magit status
快捷键 | 说明 |
---|---|
M-x magit-init | 类似于 git init ,在现有目录中初始化仓库 |
M-x magit-clone | 类似于 git clone ,从远端拉取仓库 |
快捷键 | 说明 |
---|---|
C-x g | magit status 类似于 git status ,但会显示更多的内容 |
tab | 隐藏或者扩展当前的内容 |
g | 刷新当前的git 仓库状态 |
G | 刷新所有的 magit status buffer |
c-n | 下一行 |
c-p | 上一行 |
m-p | 上一个部分 |
m-n | 下一个部分 |
2.2 保留区 stage
快捷键 | 说明 |
---|---|
s | magit-stage , 将修改添加到保留区 |
u | magit-unstage 将修改从保留区撤销 |
2.3 commit
命令 | 说明 |
---|---|
c | magit-commit , 进入提交选项 |
c-c | 在进入提交页面后, 再次执行命令 c , 创建新的commit |
c-a | 在进入提交页面后, 再次执行命令 a , 创建新的commit , 相当于git commit --amend |
C-c C-c | with-editor-finish , 提交commit |
C-c C-k | with-editor-cancel , 撤销本次提交 |
2.4 fetch
命令 | 说明 |
---|---|
f | magit fetch ,拉取最新的代码 |
f a | magit-fetch-all ,拉取所有远程分支 |
2.5 pull
命令 | 说明 |
---|---|
F | magit pull 拉取最新的代码,并且合并 |
2.6 push
命令 | 说明 |
---|---|
P | magit push 将本地代码push 到远端 |
2.7 branch
分支操作
命令 | 说明 |
---|---|
b | magit-branch ,进入分支管理 |
b-c | 相当于 命令 git checkout -b dev origin/dev ,即从远端origin/dev fork并且创建一个本地分支dev |
b-b | 替换到新的分支,git checkout branchName |
2.8 stash
使用
命令 | 说明 |
---|---|
z-z | magit-stash-both , 创建stash |
z-a | magit-stash-apply , 应用某个具体的stash |
z-l | 查看stash 列表 |
z-p | magit-stash-pop , 应用某个stash ,然后在stash list 中删除这个stash |
z-k | magit-stash-drop , 删除具体的stash |
2.9 log
使用
命令 | 说明 |
---|---|
magit-log-buffer-file | 查看单个文件的历史记录 |
三、使用场景
3.1 添加操作
(1) 三个区域
因为git
中有3个区域
工作目录
,即当前编辑目录
暂存区域
, 可以通过git add fileName
将文件添加到暂存区域
git本地仓库
, 可以通过git commit
将文件由暂存区域添加到本地仓库
(2) 从未跟踪
,已跟踪未暂存
变为暂存状态
名称 | 说明 |
---|---|
命令 | magit-stage |
git命令 | git add |
快捷键 | s |
(3) 从已经暂存
变为已经提交
状态
名称 | 说明 |
---|---|
命令 | magit-commit |
git命令 | git commit |
快捷键 | c-c |
(4) 从本地git仓库
同步到远端git仓库
名称 | 说明 |
---|---|
命令 | magit-merge |
git命令 | git merge |
快捷键 | m m |
命令 | magit-pull |
git命令 | git pull |
快捷键 | F u |
命令 | magit-push |
git命令 | git push |
快捷键 | P u |
3.2 撤销操作
(1) 工作目录
中删除文件
名称 | 说明 |
---|---|
命令 | magit-discard |
git命令 | rm -rf fileName |
快捷键 | k |
(2) 由暂存区域
撤销到工作目录
名称 | 说明 |
---|---|
命令 | magit-unstage |
git命令 | git restore |
快捷键 | u |
3.3 本地创建新的分支,同步到远端
命令 | 说明 |
---|---|
b-c | 创建一个新的分支, dev2 |
P-p | 因为此时远端没有新的分支,只需要push 此分支, dev2 |
F-u | 配置pull 对应的远端分支, 示例: origin/dev2 |
四、进阶
4.1 git merge
vs git rebase
合并分支
4.2 设置或者重置 upstream
命令 | 说明 |
---|---|
b-u | (1)如果当前设置了upstream, 取消当前设置; (2)如果没有设置,则重新设置 |
P-u | 用于本地创建新的分支,但是还没有push 到远端, -u 会直接创建远端对应分支,然后同步 |
五、错误解决
5.1 wrong-type-argument transient-suffix
详见issue,
具体解决方式为,重新编译 transient.el
,
重新编译的方式为 m-x byte-compile-file 具体的文件路径
5.2 GitError! refusing to merge unrelated histories
使用命令git pull --allow-unrelated-histories
git pull --allow-unrelated-histories
CONFLICT (add/add): Merge conflict in .gitignore
Auto-merging .gitignore
Automatic merge failed; fix conflicts and then commit the result.
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。