想象一下:
我三天前创建了分支“B”。这是我目前正在处理的分支。现在我想知道分支创建后发生了什么变化 ( X)。
这给了我 B 和 X 之间的差异(如图片中的虚线):
git diff A...
Run Code Online (Sandbox Code Playgroud)
上面的命令很方便,因为它很短而且我不需要记住“X”。
但是:我超级懒。我不想记住我当前的分支是从哪个分支创建的。
我怎样才能避免记住/输入A?
我正在寻找一种不需要我这边输入的方法。它应该列出自上次创建分支以来的所有更改。
mat*_*att 11
嗯,@{-1} 可能是 A。但话又说回来,也可能不是。它只是意味着“我以前所在的分支”。同样,通过查看git reflog可能会告诉您,您可以推断出创建当前分支时所处的位置。
但是当前分支本身并没有告诉你任何这些。这里真正的问题是你对“分支”的理解与 Git 不同。“因为分支被创建”这句话可能会误导你。
你似乎认为 B 是“从 X 到 B 结束的所有东西”。不是。B 只是一次提交:图中标记为 B 的提交。从那之后向后的所有其他内容——B 之前的提交,以及之前的提交,X,以及X 之前的提交,以及之前的提交,一直向后到根提交——具有完全相同的状态。它们是可从 B 访问的提交,仅此而已。
所以在 Git 心目中 X 并没有什么特别之处。你认为它很特别,因为它是 A 和 B“相遇”的地方。但是要区分这个事实,您必须知道 B和A的名称。您看到的是一个依赖于 A 的拓扑;如果你想让 Git 帮助你,你必须将你看到的内容传达给 Git。
一旦你愿意谈论A和B,那么细,你可以要求git diff ...A并git diff A...找出哪些改变,因为十,或者你可以谈论git merge-base A B到找到X.但只有一个人可以区分,这里的关键是A .
但是:我超级懒。我不想记住我当前的分支是从哪个分支创建的。
然后你需要在一个名为 的可执行文件中编写它的脚本,git-diffca然后可以将其称为git diffca(ca 表示“共同祖先”)
在该脚本中,您需要决定要在所有候选分支中选择什么标准:
c--c--c (C)
/
a--Y--X--a--a (A)
\
b--b--b (B, HEAD)
Run Code Online (Sandbox Code Playgroud)
你想看什么:从Y(分支C和之间的共同祖先B)变化?或来自X(A和之间B)
我会查看所有分支,git merge-base <aBranch> B为每个分支进行计算,并获取最近的提交(X在架构的情况下)
然后脚本将显示git diff A...(因为git merge-base A B产生了与 B 的最新共同祖先)
| 归档时间: |
|
| 查看次数: |
264 次 |
| 最近记录: |