头图

一、参考

emacs系列文章目录——更新ing

A walk through the Magit interface

三年 Git 使用心得 & 常见问题整理

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 gmagit status 类似于 git status,但会显示更多的内容
tab隐藏或者扩展当前的内容
g刷新当前的git仓库状态
G刷新所有的 magit status buffer
c-n下一行
c-p上一行
m-p上一个部分
m-n下一个部分

2.2 保留区 stage

快捷键说明
smagit-stage, 将修改添加到保留区
umagit-unstage 将修改从保留区撤销

2.3 commit

命令说明
cmagit-commit, 进入提交选项
c-c在进入提交页面后, 再次执行命令 c, 创建新的commit
c-a在进入提交页面后, 再次执行命令 a, 创建新的commit, 相当于git commit --amend
C-c C-cwith-editor-finish, 提交commit
C-c C-kwith-editor-cancel, 撤销本次提交

2.4 fetch

命令说明
fmagit fetch,拉取最新的代码
f amagit-fetch-all,拉取所有远程分支

2.5 pull

命令说明
Fmagit pull 拉取最新的代码,并且合并

2.6 push

命令说明
Pmagit push 将本地代码push到远端

2.7 branch分支操作

命令说明
bmagit-branch,进入分支管理
b-c相当于 命令 git checkout -b dev origin/dev,即从远端origin/dev fork并且创建一个本地分支dev
b-b替换到新的分支,git checkout branchName

2.8 stash使用

命令说明
z-zmagit-stash-both, 创建stash
z-amagit-stash-apply, 应用某个具体的stash
z-l查看stash列表
z-pmagit-stash-pop, 应用某个stash,然后在stash list中删除这个stash
z-kmagit-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)如果没有设置,则重新设置 image.png
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

image.png

使用命令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.

一曲广陵散
76 声望21 粉丝

柴米油盐酱醋茶


引用和评论

0 条评论