获取pull之前最后一次提交的SHA值

4
在pull之后,git会列出自上次pull以来修改过的文件。
问题是,在本地repo上进行了更多的工作后如何获得这个列表。
例如:
$ git checkout feature/default2
$ git pull
Updating 5420c70..b8eec49
Fast-forward
 application/configs/application.ini                                 |   1 +
 application/modules/product/forms/Search.php                        |   3 ++
 public/themes/default/bootstrap/buttons.less                        |  25 -----------
 public/themes/default/css/cmspanel.css                              | 234 ++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------
 public/themes/default/css/products.css                              |  57 ++++++++++++++++++++----
 public/themes/default/css/style.css                                 | 270 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------
 public/themes/default/gfx/icons/menu-drop-dark.png                  | Bin 0 -> 160 bytes
 public/themes/default/gfx/icons/more.png                            | Bin 0 -> 120 bytes
 public/themes/default/layouts/scripts/footer.phtml                  |  26 ++++++++++-
 public/themes/default/layouts/scripts/gallery.phtml                 |   2 +
 public/themes/default/layouts/scripts/home.phtml                    |   2 +
 public/themes/default/layouts/scripts/layout.phtml                  |   2 +
 public/themes/default/layouts/scripts/products.phtml                |  22 ++++-----
 public/themes/default/less/cmspanel.less                            |  26 +++++++++++
 public/themes/default/less/nav.less                                 |   4 +-
 public/themes/default/less/products.less                            |  61 +++++++++++++++++++++----
 public/themes/default/less/style.less                               |  59 ++++++++++++++++++++++---
 public/themes/default/less/widgets.less                             |  37 +++++++++++++++-
 public/themes/default/modules/cms/scripts/widgets/random.phtml      |   6 +--
 public/themes/default/modules/default/scripts/widgets/submenu.phtml |   2 +-
 public/themes/default/modules/product/scripts/index/view.phtml      |  44 +++++++++---------
 public/themes/default/modules/product/scripts/widgets/search.phtml  |  16 +++++++
 22 files changed, 584 insertions(+), 315 deletions(-)
 create mode 100644 public/themes/default/gfx/icons/menu-drop-dark.png
 create mode 100644 public/themes/default/gfx/icons/more.png
5420c70是拉取之前的状态。
如何确定5420c70 sha?
如果我没记错,ORIG_HEAD是上次拉取之前的状态(任何一次拉取,不仅仅是引入一些更改的那次拉取)。
我正在寻找像git checkout SOME_HEAD这样的魔术别名,以便为我执行git checkout 5420c70
我正在尝试设置一个git review别名,它应该比上次拉取时修改过的所有文件进行差异比较,但这些文件不是最新的。
在基本情况下,像这样的东西可以工作:
git pull
# lists some chanes file
git diff --name-status ORIG_HEAD..
# diffs them

但我正在寻找像这样的东西:
git pull
# lists some chanes file
git pull
# up-to-date, no changes
git diff --name-status ORIG_HEAD..
# diffs the files since the last pull which was not up-to-date

这些更改是本地的吗?还是在某个阶段已经被暂存了? - exussum
@user1281385 不,我想要查看其他开发者引入的远程仓库更改的差异。 - takeshin
所以在拉取到当前的主分支之前,可以查看更改的行吗? - exussum
@user1281385 是的,但最后一次拉取不是最新的。 - takeshin
如果第二次拉取也有一些更改,你想要做什么?在一个非常繁忙的存储库中,有人会在两个拉取之间推送。就像下面的一位评论者所说,使用git reflog。 - SidJ
4个回答

4
我认为你可以查看reflog,即 HEAD@{1},例如diff --name-only ..HEAD@{1}
作为另一个选择,您可以执行git fetch然后执行git log -p ..@{upstream}以查看即将到来的更改,然后执行git merge FETCH_HEAD将更改引入您的工作副本。

3

在查看 reflog 后,我找到了我所需要的内容:

git reflog --oneline | grep -m 1 "pull " | cut -d' ' -f1)

这将仅返回前一个成功拉取的sha,可在showlogdiff等命令中使用。


0

如果我理解你的需求,git pull 不是你需要的命令,你应该看一下 git fetch

当它完成后,你可以执行

git diff HEAD...origin 注意需要使用三个点而不是通常的两个

这将给出所有更改的单个差异。当你满意时,你可以按照通常的方式合并它们,使用 git merge 或者使用 git cherry-pick 选择其中的某些更改。


是的,使用 fetch 很容易,但通常我会使用 pull,然后有时需要 diff。 - takeshin

0
git log -n 1 --pretty=format:%H

4
请编辑并提供更多信息。不鼓励只有代码或“尝试这个”答案,因为它们没有可搜索的内容,并且不能解释为什么某人应该“尝试这个”。我们在这里致力于成为知识资源。 - abarisone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接