【问题标题】:How to view the committed files you have not pushed yet?如何查看尚未推送的已提交文件?
【发布时间】:2011-04-27 09:43:59
【问题描述】:

例如,我提交了一些文件,第二天又提交了一些文件,等等。几天后,我想查看所有提交的文件并查看它们与远程仓库的区别。请注意,我没有推送任何内容。我只是想验证一下,如果我推送一些东西,那么它将按照我的预期进入远程仓库。

【问题讨论】:

  • Git 不会推送files。它推送commits
  • 用什么命令来删除本地提交,那些我没有推送的?
  • git checkout 。这会将您的文件恢复到原始状态。
  • Git checkout <file> 会将文件恢复到 HEAD 修订版。它不会“取消提交”更改。该功能类似于 svn 等中的“revert”。如果您想“删除本地提交”,则必须对相应的提交执行 git reset

标签: git github


【解决方案1】:

假设您在本地分支 master,它正在跟踪 origin/master

git diff --stat origin/master..

【讨论】:

  • 为什么最后要写两个点?
  • @MartínNieva 这两个点表示一个范围,在被命名的东西和任何 HEAD 之间。我说“假设你在本地分支大师”,所以 HEAD 是大师。因此,这将向您展示 origin/master 和 master 之间的区别。你也可以写成origin/master..master
【解决方案2】:

在这里你会找到你的答案:

Using Git how do I find changes between local and remote

对于懒人:

  1. 使用“git log origin..HEAD”
  2. 使用“git fetch”后跟“git log HEAD..origin”。您可以使用列出的提交 ID 挑选单个提交。

当然,上面假设“origin”是您的远程跟踪分支的名称(如果您使用带有默认选项的克隆)。

【讨论】:

  • 不回答问题 - “查看我所有提交的文件并查看它们与远程仓库的区别”。
【解决方案3】:

push 命令有一个-n/--dry-run 选项,它将计算需要推送的内容,但实际上并不执行。这对你有用吗?

【讨论】:

  • 但是我们怎么知道这次推送带来了哪些变化呢?
  • 它将显示所有提交将被推送,然后您可以在相关负责人之间执行 git diff 以找出发生了什么变化。
  • 当我运行 git status 时;它显示我的分支领先于 2 次提交以及本地文件更改,稍后我将提交。所以我只做git push -n 并运行git diff 但它只显示本地的更改。
  • 如果您当前的分支是master,而您的远程分支是origin/master,那么git diff origin/master...master 将为您提供这些commtis 的差异。
【解决方案4】:

我不擅长使用 Git,但这就是我的工作。这不一定与远程仓库相比,但您可以使用远程适当的提交哈希修改git diff

假设您做了一个尚未推送的提交...

首先找到最后两个提交...

git log -2

这首先显示最后一次提交,然后从那里下降......

[jason:~/git/my_project] git log -2
commit ea7937edc8b10
Author: xyz
Date:   Wed Jul 27 14:06:41 2016 -0500

    Made a change in July

commit 52f9bf7956f0
Author: xyz
Date:   Tue Jun 14 14:29:52 2016 -0500

    Made a change in June

现在只需使用两个提交哈希(我缩写)来运行差异:

git diff 52f9bf7956f0 ea7937edc8b10

【讨论】:

    【解决方案5】:

    git diff HEAD origin/master

    origin 是远程存储库,master 是您将推送的默认分支。此外,在diff 之前执行git fetch,这样您就不会与陈旧的原点/主节点进行比较。

    附:我也是git新手,如有错误,请指正。

    【讨论】:

    • 我想指出,您的语法将显示“+”表示远程内容,“-”表示本地内容。这对我来说似乎倒退了(一个品味问题)——我想要一个“+”来显示我在本地提交的内容和一个“-”来显示远程上的内容。所以我使用: git diff origin/master HEAD
    • 对我来说似乎相反......我得到的是“删除”而不是“插入”,反之亦然。我使用了git diff origin/master HEAD,这是我所期望的。
    【解决方案6】:

    前面的答案都不错,但是都显示了origin/master。这些天来,遵循最佳实践,我很少直接在主分支上工作,更不用说从源代码库了。

    所以,如果你和我一样在分支机构工作,这里有一些提示:

    1. 假设您已经在一个分支上。如果没有,请 git checkout 该分支
    2. git log # 显示提交列表,例如 x08d46ffb1369e603c46ae96,您只需要最先出现的最新提交。
    3. git show --name-only x08d46ffb1369e603c46ae96 # 显示提交的文件
    4. git show x08d46ffb1369e603c46ae96 # 显示每个更改文件的详细差异

    或者更简单地说,只需使用 HEAD:

    1. git show --name-only HEAD # 显示提交的文件列表
    2. git show HEAD # 显示细节差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-02
      • 2010-10-09
      • 2022-06-30
      • 2013-04-25
      • 2018-03-04
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      相关资源
      最近更新 更多