其他人可以看到 rebase 中压缩的提交吗?
Are squashed commits in a rebase visible to others?
我想知道变基中压缩的提交是否对其他人可见+可访问。我将举例说明一个简单的例子。假设这一切都发生在我本地计算机的本地 git 存储库中。
- 我提交 'X' 环境机密(哦不!)
- 我做了一个提交 'Y',删除了提交的环境机密以及一些其他不相关的代码更改
- 然后我通过压缩 2 次提交(例如
git rebase -i HEAD~2
)来变基,这样我对 env 秘密的提交就被压缩了
问题: 如果我然后将我的提交推送到 public 回购协议,另一个人(假设是坏演员)是否能够以某种方式提取更改并搜索对于包含 env 秘密的压缩提交?
注意:我从 here 了解到 reflog 提交仍然可以在本地访问,但我不是从本地回购的角度询问,而是从另一台机器上拉取我的新提交的人的角度询问。此外,我不介意压缩的提交消息(强调消息)是否仍然可见,例如在变基期间有人忘记将它们注释掉的情况,我的问题与压缩的提交本身有关。
谢谢!!
I understand from here that reflog commits are still accessible locally, but I'm asking not from a local repo perspective, but rather from the perspective of someone on another machine pulling my new commits.
则否:reflog 是纯本地的,您在 reflog 中看到的取消引用历史的 none 将在 push/pull.
之后可见
只有当您推送第一次提交时,才会可见,在合并压缩之前然后强制推送:第一次和第二次推送之间的间隔可能会让某人有时间获得有问题的提交。
在交互式变基期间,X
和 Y
被包含 结果更改 的全新提交 (Z
) 所取代。如果原始提交没有链接到另一个提交、分支、标记或其他引用,它们将变为 dangling/unreachable。如您所知,它们在您的本地存储库中仍然可以访问,并且最终会被垃圾收集。
当您将分支推送到远程时,只会推送引用的提交。在这种情况下 Z
和更早的提交还没有在远程(如果有的话)上。 X
和 Y
不会被推送,除非它们是您稍后推送的另一个引用(例如分支)的一部分。
$ git clone <remote-repo> .
$ echo "SECRET" > file.txt
$ git commit -am "X"
$ echo "******" > file.txt
$ git commit -am "Y"
$ git log --oneline --graph --all
* 2e61b2a (HEAD -> master) Y
* fbeb59a X
* 3068e71 (origin/master, origin/HEAD) Initial commit
$ git rebase -i HEAD~2 # pick X, squash Y, new message: 'Z'
$ gittest % git log --oneline --graph --all
* bc58ac7 (HEAD -> master) Z
* 3068e71 (origin/master, origin/HEAD) Initial commit
新提交 bc58ac7
替换了另外两个提交。 diff 不显示秘密值(在提交 X
中看到),但仅显示两个提交的 结果更改 :
$ git diff 3068e71 bc58ac7
diff --git a/file.txt b/file.txt
index e69de29..0b13ec0 100644
--- a/file.txt
+++ b/file.txt
@@ -0,0 +1 @@
+******
推送后,我们看到 origin/master
引用了新的提交:
$ git push
$ git log --oneline --graph --all
* bc58ac7 (HEAD -> master, origin/master, origin/HEAD) Z
* 3068e71 Initial commit
当我们打印远程存储库上的所有对象时,我们看到这两个提交不存在。 (该命令需要在远程仓库中执行,不能在本地克隆中执行。)
$ git cat-file --batch-check --batch-all-objects
0b13ec01f786f69139940c06f3bc7f9645550cfa blob 7
3068e71e3ca27d864af7a1c5eb7dc90aee31de14 commit 229
76fd94cb5a10f70fe2fadc41af74e9eeeb8e35b5 tree 36
bc58ac7510f3e08d693029674a7ac545404e48cd commit 264
bdd68b0120ca91384c1606468b4ca81b8f67c728 tree 36
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 blob 0
我想知道变基中压缩的提交是否对其他人可见+可访问。我将举例说明一个简单的例子。假设这一切都发生在我本地计算机的本地 git 存储库中。
- 我提交 'X' 环境机密(哦不!)
- 我做了一个提交 'Y',删除了提交的环境机密以及一些其他不相关的代码更改
- 然后我通过压缩 2 次提交(例如
git rebase -i HEAD~2
)来变基,这样我对 env 秘密的提交就被压缩了
问题: 如果我然后将我的提交推送到 public 回购协议,另一个人(假设是坏演员)是否能够以某种方式提取更改并搜索对于包含 env 秘密的压缩提交?
注意:我从 here 了解到 reflog 提交仍然可以在本地访问,但我不是从本地回购的角度询问,而是从另一台机器上拉取我的新提交的人的角度询问。此外,我不介意压缩的提交消息(强调消息)是否仍然可见,例如在变基期间有人忘记将它们注释掉的情况,我的问题与压缩的提交本身有关。
谢谢!!
I understand from here that reflog commits are still accessible locally, but I'm asking not from a local repo perspective, but rather from the perspective of someone on another machine pulling my new commits.
则否:reflog 是纯本地的,您在 reflog 中看到的取消引用历史的 none 将在 push/pull.
之后可见只有当您推送第一次提交时,才会可见,在合并压缩之前然后强制推送:第一次和第二次推送之间的间隔可能会让某人有时间获得有问题的提交。
在交互式变基期间,X
和 Y
被包含 结果更改 的全新提交 (Z
) 所取代。如果原始提交没有链接到另一个提交、分支、标记或其他引用,它们将变为 dangling/unreachable。如您所知,它们在您的本地存储库中仍然可以访问,并且最终会被垃圾收集。
当您将分支推送到远程时,只会推送引用的提交。在这种情况下 Z
和更早的提交还没有在远程(如果有的话)上。 X
和 Y
不会被推送,除非它们是您稍后推送的另一个引用(例如分支)的一部分。
$ git clone <remote-repo> .
$ echo "SECRET" > file.txt
$ git commit -am "X"
$ echo "******" > file.txt
$ git commit -am "Y"
$ git log --oneline --graph --all
* 2e61b2a (HEAD -> master) Y
* fbeb59a X
* 3068e71 (origin/master, origin/HEAD) Initial commit
$ git rebase -i HEAD~2 # pick X, squash Y, new message: 'Z'
$ gittest % git log --oneline --graph --all
* bc58ac7 (HEAD -> master) Z
* 3068e71 (origin/master, origin/HEAD) Initial commit
新提交 bc58ac7
替换了另外两个提交。 diff 不显示秘密值(在提交 X
中看到),但仅显示两个提交的 结果更改 :
$ git diff 3068e71 bc58ac7
diff --git a/file.txt b/file.txt
index e69de29..0b13ec0 100644
--- a/file.txt
+++ b/file.txt
@@ -0,0 +1 @@
+******
推送后,我们看到 origin/master
引用了新的提交:
$ git push
$ git log --oneline --graph --all
* bc58ac7 (HEAD -> master, origin/master, origin/HEAD) Z
* 3068e71 Initial commit
当我们打印远程存储库上的所有对象时,我们看到这两个提交不存在。 (该命令需要在远程仓库中执行,不能在本地克隆中执行。)
$ git cat-file --batch-check --batch-all-objects
0b13ec01f786f69139940c06f3bc7f9645550cfa blob 7
3068e71e3ca27d864af7a1c5eb7dc90aee31de14 commit 229
76fd94cb5a10f70fe2fadc41af74e9eeeb8e35b5 tree 36
bc58ac7510f3e08d693029674a7ac545404e48cd commit 264
bdd68b0120ca91384c1606468b4ca81b8f67c728 tree 36
e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 blob 0