Git

Git graph LR work["Working tree<br/>工作树/工作区"] stage["Index / Staging Area<br/>暂存区"] repo["Local Repository<br/>本地仓库"] remote["Remote Repository<br/>远程仓库"] work -->|add| stage stage -->|commit| repo repo -->|push| remote remote -->|pull| work remote -->|"fetch/clone"| repo stage -->|checkout| work repo -->|merge| work repo -->|"reset --soft"| stage repo -->|rebase| stage repo -->|"reset --mixed"| work 工作区 (working tree) working tree, 2.9.1 之前被称作 Working Directory https://stackoverflow.com/questions/39128500/working-tree-vs-working-directory 也称工作区, 工作目录、工作副本 我们日常开发操作是在工作区中进行的。 工作区的内容会包含提交到暂存区和版本库(当前提交点)的内容,同时也包含自己的修改内容。 ...

2026-03-06 · 2 min · 344 words · -

git merge, git rebase

git merge git rebase interactive rebase Join two or more development histories together merge 合并 用于将两个或多个分支的更改合并到一起。它通常用于将一个分支上的开发成果合并到当前分支(如将 feature 分支合并回 main 分支)。其主要作用是整合不同开发者或分支上的工作,保持代码库的统一和最新。 # 基本用法 # git merge <branch-name> # merge 默认会把 commit 的历史都合并进来 # 把 branch_0 合并到当前分支 git merge branch_0 # -m 参数用于指定合并提交(merge commit)的说明信息,即合并时生成的 commit message。 git merge branch_0 -m "MSG0" # 禁用 Fast forward git merge branch_0 -m "merge with no-ff" --no-ff 合并方式 Fast-forward(快进合并) 如果当前分支没有新的提交,仅仅是落后于目标分支,Git 会直接把指针向前移动到目标分支的位置,这种合并不会产生新的合并提交。快速合并,看不出做过合并。快进合并后不会留下一个明显的"feature 分支合并节点",只有一条线性的记录。 特点: 不创建 merge commit 分支指针直接前移 提交历史呈线性 无法看出曾经有分支存在 示意图: ...

2026-02-13 · 11 min · 2185 words · -

vi basic, vim basic command

vi/vim basic, command commands vim -u NONE -N -n bigfile.txt # -u NONE: 不加载配置文件 # -u 后面跟的是要加载的配置文件路径。 # -u NONE:不加载任何配置,相当于“安全模式”或“干净模式”。 # -N: 启用现代兼容模式(非 Vi) # -n: 不创建 swap 文件 基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode) Command mode, 命令模式: 用户启动Vim之后,vim 默认是在命令模式。 Insert mode, 输入模式: i 切换到插入模式 Last line mode,底线命令模式: : 切换到底线命令模式 快捷键 ctrl + d 向下滚动半屏 ctrl + u 向上滚动半屏 基本插入 i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按 esc 进入命令模式,就会出现 8 个=。 这在插入分割线时非常有用,如`30i+<esc>`就插入了 36 个+组成的分割线。 I: 在当前行第一个非空字符前插入; gI: 在当前行第一列插入; a: 在光标后插入; A: 在当前行最后插入; o 小写 `o` 在当前行的下边插入新行, 在当前行的下边插入一行. O 大写 `O` 在当前行的上边插入新行. :r filename 在当前位置插入另一个文件的内容。 :[n]r filename 在第 n 行插入另一个文件的内容。 :r !date 在光标处插入当前日期与时间。同理,:r !command 可以将其它 shell 命令的输出插入当前文档。 escape/ESC 回到命令模式 ^v char 插入时忽略char的指定意义,这是为了插入特殊字符 vim 编辑二进制文件 # 注意用 -b,否则后面会有 0a vim -b test.bin # 以 16 进制格式查看 :%!xxd # 编辑完成后转换为二进制文件 :$!xxd -r :wq # force write :w! ### vim utf8 乱码 #### 查看文件编码 :set fileencoding # 临时显示行号 :set number # 不自动换行 :set nowrap # 自动换行 :set wrap 如果你只是想查看其它编码格式的文件或者想解决用 Vim 查看文件乱码的问题,那么你可以在 ~/.vimrc 文件中添加以下内容: ...

2022-12-15 · 6 min · 1261 words · -

JetBrains, idea, basic

JetBrains, idea, basic file> open recent, 点击打开项目的同时按 ctrl 会在新窗口打开 jetbrain> Git, 选中分支名 Ctrl + C 会复制分支名 HiDPI https://intellij-support.jetbrains.com/hc/en-us/articles/360007994999-HiDPI-configuration search everywhere (shift shift)> “Show HiDPI Info” vm option help> edit custom vm options> add line “-Dsun.java2d.uiScale.enabled=true” JetBrains keys, 快捷键 列编辑/column selection mode, Alt+Shift+Insert, Alt+Shift+i Expand All, Ctrl+Shift+= goto line: Ctrl + g ctrl + shift + k, git push ctrl + alt + y, reload from disk ctrl + alt + f, find in files ctrl + n, Down ctrl + p, Up ctrl + f, Right ctrl + b, Left ctrl + [, Move caret to code block start ctrl + ], Move caret to code block end ctrl + shift + i, generate date ctrl + shift + f, find in file ctrl + alt + l, reformat code ctrl + shift + o, Run ctrl + shift + up, move statement up ctrl + shift + down, move statement down alt + sift + up, move line up CTRL+SHIFT+N 查找文件 ...

2022-12-09 · 2 min · 417 words · -

Vim光标移动

Vim 光标移动 搜索结果之间跳转 文件之间移动 Vim 最大的特征与最大的困难就是键盘操作,所以快速移动光标是 Vim 的最基本技能。光标移动可以配合其他快捷键使用,比如 y, x, d, v,更好地掌握了光标移动也就更好地掌握了其他编辑技能。 上下左右:以字符为单位 进入 Vim 的 normal 模式(如果你在 visual 模式或者 insert 模式,可以按若干次 Esc 回到 normal 模式)。 h 向左移动一个字符。 j 向下移动一个字符。 k 向上移动一个字符。 l 向右移动一个字符。 和其他快捷键一样,可以配合数字来移动多个字符,比如 5l 向左移动 5 个字符。 以单词为单位移动 多数情况下单词移动比字符移动更加高效,比如要走到当前变量名前加一个 let。 w 移动到下一个单词的词首。 b 移动到上一个单词的词首。 e 移动到下一个单词的结尾。 单词移动同样支持数字前缀,比如 4w 可以向后移动 4 个单词。此外大写的 W, B, E 具有同样的功能,只不过小写用标点符号来分隔单词,大写用空格来分隔单词,更适合在代码里移动。 以行为单位移动 ^ 移动到行首第一个词的首字母。 | 移动到行首第一个字符。 $ 移动到行尾。 j 移动到下一行。 k 移动到上一行。 :10 移动光标到文件第 10 行。可以 :set number 来让 vim 显示行号。 gg 移动到文件首行。 G 移动到文件尾行。 上下行移动的命令同样可以加数字,比如 10j 向下移动 10 行。 ...

2021-07-22 · 1 min · 184 words · -

vim 粘贴注释

vim 粘贴注释 vim在粘贴代码时会自动缩进,这样会把有注释的代码搞得一团糟,可能因为某行的一个注释造成后面的代码全部被注释掉,以前就是直接粘贴的,发现不得不解决这个自动添加注释的问题。 临时方法: vim 是自带缩进的,我们执行粘贴前需要设置为粘贴模式: set paste 当我们写代码时需要缩进,进而,在粘贴完了需要改回来: set no paste 一劳永逸方法: 为了避免麻烦,我们可以为vim设置快捷键: 在/etc/vim中,修改vimrc,追加代码: vim /etc/vim/.vimrc 追加代码: set pastetoggle=<F9> 这样你每次粘贴前就按一下F9,完事之后再F9切回来,OK! vim粘贴注释-解决方法 http://www.chenglin.name/linux/blog-linux/595.html/embed#?secret=QDy4MQGTrl

2020-04-22 · 1 min · 23 words · -

开源镜像站, open source mirror

开源镜像站, open source mirror 清华 https://mirrors.tuna.tsinghua.edu.cn/ 华为 https://mirrors.huaweicloud.com/ 中科大 https://mirrors.ustc.edu.cn/help/dockerhub.html aliyun https://developer.aliyun.com/mirror/ 北京外国语大学开源软件镜像站 https://mirrors.bfsu.edu.cn/ http://mirrors.cqu.edu.cn http://mirrors.nju.edu.cn http://ftp.sjtu.edu.cn http://mirrors.bupt.edu.cn http://mirrors.cn99.com http://mirrors.bfsu.edu.cn http://mirrors.njupt.edu.cn

2020-03-13 · 1 min · 21 words · -

vscode, code-server

vscode, code-server code server 是 coder 公司基于微软开源的 Visual Studio Code 开发的一款产品。 code server 的目标是为开发者构建一个便捷统一的开发环境,让开发者能从任意设备、任意位置通过浏览器来进行代码的编写。从而免去了常规的 IDE 开发流程中的环境搭建的问题。 code server 有哪些优点? 环境统一 code server 解决的第一个问题就是跨设备的环境一致性。因为 code server 始终运行在一个远程的云端环境,因此他的开发环境始终是一致的,不会出现不同平台或者不同设备运行相同的代码而出现各种问题的情况。 我相信有不少程序员遇到过类似的问题。比如,同样的代码在 MacOS 上运行正常,在 Windows 上运行报错;或者在同事 A 的电脑上运行正常,而在同事 B 的电脑上运行报错。 而 code server 解决了这个问题,对于同一个项目的代码开发,不管是谁,运行代码的环境都是 code server 所在的服务器环境,这有效的避免的环境不同带来的问题,让程序员把精力更多地放在代码编写上,而不是去解决各种平台切换带来的问题上。 podman run -d --name code-server \ -p 8080:8080 \ -v "code-server-config:/root/.config" \ -v "code-server-project:/home/coder/project" \ -v "code-server-ssh:/root/.ssh" \ -v "code-server-data:/data" \ -u "$(id -u):$(id -g)" \ -e "DOCKER_USER=root" \ --memory=2g \ --cpus=1 \ codercom/code-server:3.12.0 --auth none nginx 配置 location / { proxy_pass http://wyse5070.wiloon.com:8080; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_set_header Accept-Encoding gzip; } ...

2019-05-19 · 1 min · 107 words · -

GraphViz

GraphViz pacman -S graphviz GraphViz是什么? GraphViz是一个开源的图像可视化的软件,是贝尔实验室开发的一个开源的工具包,它使用一个特定的 DSL(领域特定语言): dot 作为脚本语言,然后使用布局引擎来解析此脚本,并完成自动布局。graphviz 提供丰富的导出格式,如常用的图片格式,SVG,PDF 格式等。 Graphviz由一种被称为DOT语言的图形描述语言[3] 与一组可以生成和/或处理DOT文件的工具组成: dot 一个用来将生成的图形转换成多种输出格式的命令行工具。其输出格式包括PostScript,PDF,SVG,PNG,含注解的文本等等。 neato 用于 sprint model 的生成 (在Mac OS版本中称为energy minimized) 。 twopi 用于放射状图形的生成 circo 用于圆形图形的生成。 fdp 另一个用于生成无向图的工具。 dotty 一个用于可视化与修改图形的图形用户界面程序。 lefty 一个可编程的(使用一种被EZ影响的语言[4])控件,它可以显示DOT图形,并允许用户用鼠标在图上执行操作。Lefty可以作为MVC模型的使用图形的GUI程序中的视图部分。 作者: 疯狂的小托马斯 链接: https://www.jianshu.com/p/8e88b2a5dc03 来源: 简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

2019-04-13 · 1 min · 41 words · -

VIM 列编辑

VIM 列编辑 VIM的列编辑操作 插入列 插入操作的话知识稍有区别。例如我们在每一行前都插入"() " 光标定位到要操作的地方。 CTRL+v 进入"可视块" 模式, 选取这一列操作多少行。 SHIFT+i(I) 然后输入要插入的内容。此时输入的内容只会出现在光标所在的行. ESC 按两次, 会在每行的选定的区域出现插入的内容。 删除列 光标定位到要操作的地方。 CTRL+v 进入"可视 块"模式,选取这一列操作多少行。 d 删除。 https://www.cnblogs.com/xiaowant/articles/1992923.html

2018-12-25 · 1 min · 24 words · -

Vim 查找, 替换

Vim 查找, 搜索, find 查找 在 normal 模式下按下 / 即可进入查找模式 (向下查找, ? 向上查找), 输入要查找的字符串并按下回车。 Vim 会跳转到第一个匹配。 按下 n 查找下一个, 按下 N 查找上一个。 换行符 \n https://blog.kuretru.com/posts/67976692/ /foo.*\n.*bar 大小写敏感 \c, \C # 大小写不敏感 /foo\c # 大小写敏感 /foo\C 大小写敏感配置 Vim 默认采用大小写敏感的查找, 为了方便我们常常将其配置为大小写不敏感 “设置默认进行大小写不敏感查找 set ignorecase “如果有一个大写字母, 则切换到大小写敏感查找 set smartcase vim 正则表达式 Vim 查找支持正则表达式, 例如 /vim$ 匹配行尾的 “vim”。 需要查找特殊字符需要转义,例如 /vim$ 匹配 “vim$"。 注意查找回车应当用\n,而替换为回车应当用\r (相当于<CR>) 。 将会查找所有的"foo”,“FOO”,“Foo"等字符串。 将上述设置粘贴到你的~/.vimrc,重新打开Vim即可生效。 查找当前单词 在normal模式下按下*即可查找光标所在单词 (word) , 要求每次出现的前后为空白字符或标点符号。例如当前为foo, 可以匹配foo bar中的foo,但不可匹配foobar中的foo。 这在查找函数名、变量名时非常有用。 ...

2018-12-19 · 2 min · 394 words · -

archlinux vim 剪贴板

archlinux vim 剪贴板 sudo pacman -S gvim #复制到系统粘贴板 "+y #从系统粘贴板粘贴 "+p https://blog.csdn.net/dadoneo/article/details/6003415 用vim这么久 了,始终也不知道怎么在vim中使用系统粘贴板,通常要在网上复制一段代码都是先gedit打开文件,中键粘贴后关闭,然后再用vim打开编辑,真的不爽;上次论坛上有人问到了怎么在vim中使用系统粘贴板,印象里回复很多,有好几页的回复却没有解决问题,今天实在受不了了又在网上找办法,竟意外地找到 了,贴出来分享一下。 如果只是想使用系统粘贴板的话直接在输入模式按 Shift+Inset 就可以了,下面讲一下 vim 的粘贴板的基础知识,有兴趣的可以看看,应该会有所收获的。 vim帮助文档里与粘贴板有关的内容如下 vim(我这是GVIM)有17个粘贴板,分别是"、 0、1、2、…、9、-、_、+、. 、 : 、/:: ;用:reg命令可以查看各个粘贴板里的内容。在vim中简单用y只是复制到" (双引号)粘贴板里,同样用p粘贴的也是这个粘贴板里的内容; 要将vim的内容复制到某个粘贴板, 需要退出编辑模式, 进入正常模式后, 选择要复制的内容, 然后按"Ny完成复制, 其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了,有两点需要说明一下: VIM内部 (") : “号粘贴板 (临时粘贴板) 比较特殊,直接按y就复制到这个粘贴板中了,直接按p就粘贴这个粘贴板中的内容 (也可以说是VIM专用吧) ; 与外部程序交互(_/+): +号粘贴板是系统粘贴板,用”+y将内容复制到该粘贴板后可以使用Ctrl+V将其粘贴到其他文档 (如firefox、gedit) 中,同理,要把在其他地方用Ctrl+C或右键复制的内容复制到vim中,需要在正常模式下按"+p; 要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号,如上所述,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p("+* 也行)将系统全局粘贴板里的内容粘贴进来。 我用的是GVIM,可能与某些帖子说的不一样,但大体操作还是一样的。好了,现在可以完美运用VIM复制粘贴了,再也不用慢腾腾地点鼠标了。 The vim package is built without Xorg support; specifically the +clipboard feature is missing, so Vim will not be able to operate with the primary and clipboard selection buffers. The gvim package provides also the CLI version of Vim with the +clipboard feature.

2018-12-16 · 1 min · 92 words · -

vscode basic,vscode, visual studio code

vscode basic,vscode, visual studio code linux vscode 配置 echo "--enable-features=UseOzonePlatform --ozone-platform=wayland" >> ~/.config/code-flags.conf debian install visual studio code install from repo https://linuxize.com/post/how-to-install-visual-studio-code-on-debian-9/ download deb https://code.visualstudio.com/# vscode 列编辑 Alt+Shift+鼠标左键拖动, 选中拖动的区域内容 https://blog.csdn.net/u011127019/article/details/74039598 vscode remote ssh, A> ssh> B A 安装插件 “Remote - SSH” 在 B 主机上配置ssh 公钥 私钥放在 C:\Users\user0\.ssh 里 A, 点击 vscode左下角,选择 remote-ssh: connect to host 字体 打开 VSCode,Windows 下按 Ctrl + ,,macOS 下按 Cmd + ,,进入设定。在上方搜索框搜索 editor.fontFamily,在 Editor: Font Family Controls the font family. 下方的框框填入 font-family 即可。 ...

2018-09-01 · 2 min · 302 words · -

Git HEAD

Git HEAD 当你提交(commit)新更改时,HEAD 会随着分支一起移动到新的提交。 当你切换分支(比如用 git checkout 或 git switch),HEAD 会改变指向,指向你切换到的分支。 这个 HEAD 随你切换分支而变化,始终指向你“当前所在”的分支或 commit。 你在 main 分支,HEAD 内容是 ref: refs/heads/main 你切换到 dev 分支,HEAD 变为 ref: refs/heads/dev 你 checkout 某个历史 commit,HEAD 内容是该 commit 的 SHA(分离 HEAD 状态) # 正常情况下(attached HEAD),HEAD 是一个符号引用,指向当前分支 # 本地 HEAD 通常指向分支,而不是直接指向提交 cat .git/HEAD # 输出:ref: refs/heads/main # 1. HEAD 指向 main 分支 # 2. main 分支指向它的最新提交 # 3. HEAD 通过分支间接指向最新提交 # HEAD -> 分支 -> 最新提交 # HEAD → refs/heads/main → commit_abc123 # 查看 HEAD 指向的分支 git symbolic-ref HEAD # 输出:refs/heads/main # 查看 HEAD 最终指向的提交 git rev-parse HEAD # 输出:abc123...(提交SHA) git rev-parse HEAD # 获取当前HEAD指向的提交SHA git rev-parse main # 获取main分支的最新提交SHA cat .git/refs/heads/main # 直接查看分支文件内容(提交SHA) detached HEAD # 当检出具体 commit 时,HEAD 直接指向提交 git switch --detach commit_abc123 cat .git/HEAD # 输出:commit_abc123...(直接是提交SHA,不是 ref: 开头) # 此时 HEAD 直接指向提交,不通过分支 HEAD 的作用是告诉 Git “我现在在哪里工作” ...

2018-08-03 · 4 min · 842 words · -

golang git server, gogs, gitea

golang git server, gogs, gitea gitea 的文档 只提到了docker compose的部署方式, 想改成podman 还需要折腾一下, gogs 的文档 更清晰一些方便使用podman podman run --rm --name=gogs -p 10022:22 -p 10880:3000 -v gogs-data:/data gogs/gogs:latest http://192.168.50.13:10880 Database Type: sqlite3 Application Name: pingd Domain: 192.168.50.13 SSH Port: 1022 docker run --name=gogs -p 10022:22 -p 10880:3000 -v /var/gogs:/data gogs/gogs # docker for gogs sudo systemctl status docker sudo systemctl start docker sudo systemctl enable docker sudo docker pull gogs/gogs mkdir -p /data/gogs sudo docker run -name=gogs -p 10022:22 -p 10080:3000 -v /data/gogs:/data gogs/gogs sudo docker start gogs sudo docker stop gogs sudo docker rm gogs Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。 ...

2018-01-17 · 1 min · 135 words · -

git proxy

git proxy # http proxy git config http.proxy 'http://192.168.50.xx:80' git config --global http.proxy http://proxy.mycompany:80 # socks5 proxy # project git config http.proxy 'socks5://192.168.50.4:10800' git config https.proxy 'socks5://192.168.50.4:10800' # global git config --global http.proxy 'socks5://192.168.50.90:1080' git config --global https.proxy 'socks5://192.168.50.90:1080' git config --global --unset http.proxy git config --global --unset https.proxy npm config delete proxy https://gist.github.com/laispace/666dd7b27e9116faece6 https://www.jianshu.com/p/739f139cf13c

2017-12-06 · 1 min · 55 words · -

git submodule

git submodule 有 submodule 的 git 仓库根目录会有 .gitmodules 文件。 # check submodule with command git submodule status # 有输出就是有 submodule 当你在一个 Git 项目上工作时,你需要在其中使用另外一个Git 项目。也许它是一个第三方开发的Git 库或者是你独立开发和并在多个父项目中使用的。这个情况下一个常见的问题产生了: 你想将两个项目单独处理但是又需要在其中一个中使用另外一个。 在 Git 中你可以用子模块 submodule 来管理这些项目,submodule 允许你将一个 Git 仓库当作另外一个 Git 仓库的子目录。这允许你克隆另外一个仓库到你的项目中并且保持你的提交相对独立。 主仓库切换分支之后,子仓库并不会跟着一起切换, 得在主仓库上执行一次 git submodule update git submodule update –init 将 git submodule init 和 git submodule update 合并成一步。如果还要初始化、抓取并检出任何嵌套的子模块, 请使用简明的 git submodule update –init –recursive。 # 添加 submodule # 为已有的 git 仓库增加子模块, 命令执行完成,会在当前工程根路径下生成一个名为“.gitmodules”的文件 # enx: 子模块的目录名 git submodule add git@github.com:wiloon/enx.git enx # 已经配置子模块的仓库, 主项目和子模块一起克隆 git clone -b branch_0 git@github.com:foo/bar.git --recursive # 查看子模块, 如果 git submodule 返回的 hash 前面有一个减号, 代表子模块还没有检出, 加号代表 submodule 距离上一次跟主仓库关联的 commit id 有新的 commit, 这时在主仓库里对 submodule 所在的目录做 git add folder0 之后 git submodule 命令返回的数据不再有加号. # git submodule 返回的 commit id 是当前 submodule 目录当前的 commit id # commit id 前面 的加号代表远程仓库关联的submodule 有更新, 执行 git submodule update 之后 , submodule 的版本会更新到与远程主仓库关联的submodule commit id 一致. git submodule # 比如只克隆了主仓库, submodule 所在的目录肯定是空的, 要用这个命令初始化一下 submodule, 然后再执行 git submodule update, submodule 目录就克隆下来了. git submodule init # 把submodule 更新到跟远程主仓库关联的 commit id 一致, git status 应该是 clear 的 git submodule update # 更新指定的 submodule 到远程仓库的最新版本 git submodule update --init --remote <submodule_path> # 把 submodule 更新到子仓库最新的 commit id, 这个 commit 有可能跟之前关联的 commit id 不一样, 一般会比之前 关联的 commit id 更新, git status 会看到 submodule 有变更需要提交, 需要更新 关联的 commit id. git submodule update --remote # 拉取子模块 的代码 git submodule update --init --recursive 使用 submodule, 主仓库 git pull 之后, submodule 不会自动更新, 还要检查一下 submodule 的版本, 可能需要执行git submodule update 更新 一下. ...

2015-01-18 · 2 min · 253 words · -

Git Stash

Git Stash 比如当前分支是 branch0, 新建了一个文件, 之后发现分支不对, 应该是在 branch1 上添加, 这时就可以用 git stash 暂存当前修改, 切换到 branch1 再 git stash pop. git stash # 如果有新添加的文件,那么就需要添加 -a 参数 git stash save -a "msg0" git stash list git stash pop git stash pop 开启某个修改暂存后,会在 stash list 里面将最近一次的修改暂存记录删除掉,而 git stash apply stash@{0} 则不会。 https://blog.csdn.net/daguanjia11/article/details/73810577 Git Stash用法 最近在使用Git管理项目工程的时候,遇到了很多问题,也学习到了很多关于Git常见使用的技巧,下面就其中关于Git Stash的用法和大家分享下。 首先,简单介绍下Git Stash命令的用法,详细的用法在man文档中有相关介绍,下面我来说明常见的使用。 git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。 git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。 git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。 git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。 ...

2014-08-09 · 1 min · 106 words · -

Emacs的搜索功能

Emacs的搜索功能 (转自: http://www.80×86.cn/blog/blogview.asp?logID=569) Emacs入门指南(3) [ Date: 2006-03-15 12:04:44 AM | Author: 80x86 | From: Original | Sunny | Emotion Index: +2 ] 通过前两篇文章的学习,您已经可以把Emacs当作一个Better-Notepad来使用了。今天我们要学习的是Emacs中强大的搜索功能。 默认情况下,Emacs采用了一种很待殊的"增量搜索"的功能,虽然它与我们常用的搜索方法在操作习惯上有很大的不同,但习惯后确实是十分的方便。 要让Emacs开始执行搜索,可以按C-s或C-r,前者是从光标位置往后查找,后者则是往前查找。我们以C-s为例。按动C-s后,Emacs在 Minibuffer中提示: I-Search:,这时您便可以输入要搜索的关键字了,现在学习试验的阶段建议您输入时手脚慢一点,看看Emacs是如何来执行您的搜索请求的。 比如,要搜索"search"一词,您输入s,这时Emacs会把光标移动到最近一个s字母上,这里如果您暂停输入一会儿,Emacs就会把所有的s字母进行高亮。您继续输入e,这时Emacs就找到了最近的se字母组合。一直输入下去,直到Emacs找到您要找的内容,这时按回车键即可结束查找。 在查找过程中,您可以反复按动C-s或C-r来执行向后或向前的查找。如果您已经找到一了一个匹配的内容,并且按了回车键结束了查找,这时如要继续查找这个内容,您只需按两次C-s或C-r即可,第一次按动用于激活查找功能,而第二次按动则表示要继续查找。 在输入查找关键字时,如果不小心输错了,可以按动<DEL>键来清除前一个字符,请注意,在Emacs术语中,<DEL>键是指我们通常所说的<BackSpace>键,而<delete>键才表示我们键盘上的<delete>或<Del>键。 输入关键词时也有一个细节的问题,如果您输入的关键字全部是英文小字母,则Emacs会进行不区分大小写的查找。但如果输入的关键字中包含有大写字母, Emacs就会进行区分大小写的查找。另外在查找的过程中,可以通过M-c快捷键来切换区分大小字模式,可以用它来强行指定是否区分大小写。 如果不想用Emacs的增量搜索功能,也可以让Emacs进行传统的搜索,在按下C-s或C-r后,直接打一个回车键,这时Emacs就将进行非增量搜索,您可以输入你的关键字,再按回车键来执行搜索。 下面要介绍的是更为强大的正则表达式搜索功能。您可以通过按动C-M-s或C-M-r来启动正向或反向的正则表达式搜索功能,Emacs会在Minibuffer中提示Regexp I-search:,这时您便可以输入正要匹配的正则表达式了。 在正则表达式中可以使用很多的控制符号,这里我挑选几个常用的作一个简单的介绍,更全面复杂的解释可以在Emacs的手册中查到。 ‘.’ (句号): 正则表达式的中句号可以用于匹配一个任意的字符。比如正则式’a.b’就可以匹配abb,acb,adb。。。等等以a开头以b结尾的三个字符的字符串。 ‘*’: 正则表达式中的*号可以用于表示把它前面的字符重复0次或多次。比如’ff*‘可以匹配一个或多个相连的f的字符串。 ‘+’: 正则表达式中的+号与*号的作用基本相同,区别在于它表示把它前面的字符重复1次或多次,所以可知正则式’ff*‘等价与’f+’。 Emacs的正则表达式语法十分复杂与强大,请您阅读Emacs手册来对它们进行全面的学习,一定会给您的工作带来巨大的便捷,作为一篇入门教程,这里我就不再作更全面的叙述了。 http://www.learndiary.com/2006/04/emacs%E4%B8%AD%E5%BC%BA%E5%A4%A7%E7%9A%84%E6%90%9C%E7%B4%A2%E5%8A%9F%E8%83%BD%EF%BC%88%E8%BD%AC%E5%B8%96%EF%BC%89/ C – s 后切换到搜索框粘贴 Emacs 搜索, C - s 后切换到搜索框粘贴 C - s M - y http://groups.google.com/group/cn.bbs.comp.emacs/browse_thread/thread/84d2258a0d8fdf81/70af2a6296c1f7dd?lnk=raot

2013-07-16 · 1 min · 62 words · -

Emacs Markdown

Emacs Markdown 安装与配置 安装 markdown-mode 非常简单,只需将下载的 markdown-mode.el 文件置于 Emacs 可找到的路径,例如 ~/.emacs.d/modes。然后把下列内容添加到 .emacs 文件中即可: (add-to-list 'load-path "~/.emacs.d/modes") (autoload 'markdown-mode "markdown-mode.el" "Major mode for editing Markdown files" t) (setq auto-mode-alist (cons '("\.markdown" . markdown-mode) auto-mode-alist)) 这样,当 Emacs 打开扩展名为 markdown 的文件时,就会自动进入 Markdown 主模式。如果你定义的 Markdown 扩展名与此不同,那么你将需要替换上面配置内容最后一行中的 .markdown。 编辑命令 Markdown 模式将常用的编辑命令都绑定到了特定的组合键上,因此要插入某个项目,只需按相应的组合键。比如: C-c C-t n 插入 hash 样式的标题,其中 n 为 1~5,表示从第一级标题到第五级标题。 C-c C-t t 插入 underline 样式的标题,这是一级。 C-c C-t s 同上,这是二级。 C-c C-a l 插入链接,格式为 [text][/text] (url)。 ...

2013-02-24 · 1 min · 120 words · -