- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
本文分享自华为云社区《Git你有可能不知道交互式暂存》,作者:龙哥手记。
本节中的几个交互式 Git 命令可以帮助你将文件的特定部分组合成提交。 当你在修改了大量文件后,希望这些改动能拆分为若干提交而不是混杂在一起成为一个提交时,这几个工具会非常有用。 通过这种方式,可以确保提交是逻辑上独立的变更集,同时也会使其他开发者在与你工作时很容易地审核。 如果运行 git add
时使用 -i
或者 --interactive
选项,Git 将会进入一个交互式终端模式,显示类似下面的东西:
$ git add -i
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now>
可以看到这个命令以和平时非常不同的视图显示了暂存区——基本上与 git status
是相同的信息,但是更简明扼要一些。 它将暂存的修改列在左侧,未暂存的修改列在右侧。
在这块区域后是“Commands”命令区域。 在这里你可以做一些工作,包括暂存文件、取消暂存文件、暂存文件的一部分、添加未被追踪的文件、显示暂存内容的区别。
如果在 What now>
提示符后键入 u
或 2
(更新),它会问你想要暂存哪个文件:
What now> u
staged unstaged path
1: unchanged +0/-1 TODO
2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
要暂存 TODO
和 index.html
文件,可以输入数字:
Update>> 1,2
staged unstaged path
* 1: unchanged +0/-1 TODO
* 2: unchanged +1/-1 index.html
3: unchanged +5/-1 lib/simplegit.rb
Update>>
每个文件前面的 *
意味着选中的文件将会被暂存。 如果在 Update>>
提示符后不输入任何东西并直接按回车,Git 将会暂存之前选择的文件:
Update>>
updated 2 paths
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> s
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
现在可以看到 TODO
与 index.html
文件已经被暂存而 simplegit.rb
文件还未被暂存。 如果这时想要取消暂存 TODO 文件,使用 r
或 3
(撤消)选项:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> r
staged unstaged path
1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> 1
staged unstaged path
* 1: +0/-1 nothing TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
Revert>> [enter]
reverted one path
再次查看 Git 状态,可以看到已经取消暂存 TODO
文件:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> s
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: unchanged +5/-1 lib/simplegit.rb
如果想要查看已暂存内容的区别,可以使用 d
或 6
(区别)命令。 它会显示暂存文件的一个列表,可以从中选择想要查看的暂存区别。 这跟你在命令行指定 git diff --cached
非常相似:
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now> d
staged unstaged path
1: +1/-1 nothing index.html
Review diff>> 1
diff --git a/index.html b/index.html
index 4d07108..4335f49 100644
--- a/index.html
+++ b/index.html
@@ -16,7 +16,7 @@ Date Finder
<p id="out">...</p>
-<div id="footer">contact : support@github.com</div>
+<div id="footer">contact : email.support@github.com</div>
<script type="text/javascript">
通过这些基本命令,可以使用交互式添加模式来轻松地处理暂存区。
Git 也可以暂存文件的特定部分。 例如,如果在 simplegit.rb 文件中做了两处修改,但只想要暂存其中的一个而不是另一个,Git 会帮你轻松地完成。 在和上一节一样的交互式提示符中,输入 p
或 5
(补丁)。 Git 会询问你想要部分暂存哪些文件;然后,对已选择文件的每一个部分,它都会一个个地显示文件区别并询问你是否想要暂存它们:
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index dd5ecc4..57399e0 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -22,7 +22,7 @@ class SimpleGit
end
def log(treeish = 'master')
- command("git log -n 25 #{treeish}")
+ command("git log -n 30 #{treeish}")
end
def blame(path)
Stage this hunk [y,n,a,d,/,j,J,g,e,?]?
这时有很多选项。 输入 ?
显示所有可以使用的命令列表:
Stage this hunk [y,n,a,d,/,j,J,g,e,?]? ?
y - stage this hunk
n - do not stage this hunk
a - stage this and all the remaining hunks in the file
d - do not stage this hunk nor any of the remaining hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
通常情况下可以输入 y
或 n
来选择是否要暂存每一个区块, 当然,暂存特定文件中的所有部分或为之后的选择跳过一个区块也是非常有用的。 如果你只暂存文件的一部分,状态输出可能会像下面这样:
What now> 1
staged unstaged path
1: unchanged +0/-1 TODO
2: +1/-1 nothing index.html
3: +1/-1 +4/-0 lib/simplegit.rb
simplegit.rb
文件的状态很有趣。 它显示出若干行被暂存与若干行未被暂存。 已经部分地暂存了这个文件。 在这时,可以退出交互式添加脚本并且运行 git commit
来提交部分暂存的文件。
也可以不必在交互式添加模式中做部分文件暂存——可以在命令行中使用 git add -p
或 git add --patch
来启动同样的脚本。
更进一步地,可以使用 git reset --patch
命令的补丁模式来部分重置文件, 通过 git checkout --patch
命令来部分检出文件与 git stash save --patch
命令来部分暂存文件。 我们将会在接触这些命令的高级使用方法时了解更多详细信息。
我正在开发一个使用 JTable 的简单 Java 应用程序。我正在尝试实现我所看到的here 。给定链接上的表格的行为与我在表格中想要的行为完全相同。我已完全按照引用链接上显示的方式进行操作。 但是
我需要将 *.ml 文件加载到 Ocaml 顶层(交互式解释器,当您在 shell 中键入“ocaml”时),然后从 Matlab 进程发送指令,获取指令结果,发送返回另一条指令,... 我编写了这个
我正在尝试实现交互式 UILocalNotifications。 以下是我的代码。我无法获得接收通知的 3 个操作按钮。 UIMutableUserNotificationAction *nActio
我不是一个干净的 CSS 编码器,所以这可能是我问题的症结所在……但是……我从本教程中拼凑了一张交互式 map :http://www.noobcube.com/tutorials/html-css/
这个问题在这里已经有了答案: 关闭 13 年前。 Possible Duplicate: How to save a Python interactive session? 我可以在“头脑 Stor
我试图在不扩展 ListActivity 类的情况下创建交互式 ListView。布局应该是左侧的 RatingBar 和标签向右。这是我目前的代码,没有任何编译错误,但在应用程序启动时崩溃: pub
我正在尝试使用 antlr 编写一种简单的交互式(使用 System.in 作为源)语言,但我遇到了一些问题。我在网上找到的例子都是使用每行循环,例如: while(readline) resul
我想创建一个交互式 JTable。为此,我想在表格的单元格中添加 JPanel。一旦 JPanel 位于单元格中,我就可以将我的各种组件添加到 JPanel 中,从而使表格具有交互性。每个 JPane
我有两个具有完全相同文件的分支(如果您想知道它是一个 .sql 文件),我想以交互方式 merge 它。 我非常想像在发生冲突(或命令行)时那样打开一个 diff 程序,然后准确选择行到哪里。 有什么
我想用交互式 rebase 编辑一个提交。当我用 edit 替换 pick 时,此提交的更改仍应用于 repo(以便我可以编辑提交)但我想从头开始重写它。我该怎么做? 最佳答案 在交互式 rebase
来自 Python relative imports for the billionth time : 要使 from .. import 起作用,模块名称中的点数必须至少与 import 语句中的点
如何使条形与一整天一样宽?现在,条形图更像是划分一天的开始的线。我是否从条形标记切换到矩形标记?我会玩带秤吗?或者我是否在不修改数据的情况下强制分箱? 现在条形图太细了。因为图形是交互式的,所以我无法
是否有任何命令行技巧可以让 SVN 添加来自 svn stat 的所有丢失的文件?互动? 例如,类似于: svn add --interactive $ new file: file1.tmp
我想知道这是否可以(可能不是)使用 R 中的并行处理后端之一来完成。 .我尝试了一些谷歌搜索,但一无所获。 我目前遇到的一般问题: 我有一些大物体需要大约半小时才能到达 load 我想在数据上生成一系
我一直在关注问题 here 的建议暂时将各种提示/信息放在我在 Altair 中的地 block 上。但是,如果 Altair 绘图设置为 interactive(),则此建议不起作用 - 在我看来,
简短的问题是,如果 shell 位于不拥有 tty 的孤立进程组中,它应该做什么?但我建议阅读长问题,因为它很有趣。 这是一种有趣且令人兴奋的方法,可以使用您最喜欢的 shell 将您的笔记本电脑变成
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
有没有办法实现交互式 cli,允许您从多个选项中进行选择? 我想要实现如下目标: 显示的示例是使用 JavaScript 中的 Quirer.js 库实现的,但我似乎找不到在 Java 中实现类似功能
我正在尝试使用运行一些命令的输入脚本来运行交互式 R (Windows XP),然后让我进入 R 命令行提示符。但是,当我运行它时,它会退出。 例如,这是输入文件: test.r: x = 1 x 以
我是一名优秀的程序员,十分优秀!