git会保持中间差异吗?

时间:2014-01-14 01:58:02

标签: git

我有一个主存储库,只有一个主分支和一个包含master分支和dev分支的个人存储库。如果我正在从个人/ dev分支到主/主分支,请git记录个人/ dev分支中发生的每个单独的更改(例如,包含密码的临时代码可以是发现在主/主)?或者它会将个人/ dev更改合并为一个合并更改(以便在main / master中找不到包含passowords的临时代码)?

行为是否依赖于主机软件? FWIW,我正在使用Stash

3 个答案:

答案 0 :(得分:1)

Stash和GitHub在这种情况下具有相同的行为。原始的单个提交集将永久保持并可见,即使您已合并拉取请求并删除了所有远程功能分支。如果您在项目的分支机构中查看SourceTree并进行合并,则很容易看到所有细粒度的提交仍然很容易检查,对于任何有权访问git的人来说,可以使用repo。

如果您将它们推送到Stash等远程git服务器,那么早期提交的秘密就不安全了。

答案 1 :(得分:0)

我假设你在谈论git merge?默认方式将保留备用分支的所有中间历史记录,但是您可以在合并之前重写dev分支的历史记录(即git rebase -i,或者,您可以执行git merge --squash来创建新的提交在master上使用分支的更改(没有中间提交)

本SO答案稍微讨论了这两个选项的区别:https://stackoverflow.com/a/2427520/504685


编辑添加:您可能正在谈论git pull,我只是偏执并经常不使用它,但似乎有一个--squash选项可能会引起关注还有你:https://www.kernel.org/pub/software/scm/git/docs/git-pull.html

答案 2 :(得分:0)

当您将master推送到Stash时,唯一提交给主机的提交是可以从master访问的提交。如果您已将dev合并到master,那么这将包括合并前的所有dev提交。这种行为是git存储库模型的一部分,无论你使用什么类型的主机,都应该是相同的。

使用图形差异查看器最容易看到。签出master后,在命令提示符下键入gitk。这将显示可从master到达的所有提交。如果您执行gitk --all,您还可以查看remote/master点的位置,它会告诉您Stash仓库中已有哪些提交。

如果您想追溯删除任何隐私信息,请查看GitHub上的removing sensitive information guide结束信息。