如何显示下次拉取将更新什么?

如何显示下次拉取将更新什么?

在 SVN 中,执行此操作svn update将显示带有状态前缀的完整路径列表:

$ svn update
M foo/bar
U another/bar
Revision 123

我需要获取此更新列表以进行一些后期处理工作。将 SVN 存储库转移到 Git 后,我​​找不到获取更新列表的方法:

$ git pull
Updating 9607ca4..61584c3
Fast-forward
 .gitignore                                         |    1 +
 uni/.gitignore                                     |    1 +
 uni/package/cooldeb/.gitignore                     |    1 +
 uni/package/cooldeb/Makefile.am                    |    2 +-
 uni/package/cooldeb/VERSION.av                     |   10 +-
 uni/package/cooldeb/cideb                          |   10 +-
 uni/package/cooldeb/cooldeb.sh                     |    2 +-
 uni/package/cooldeb/newdeb                         |   53 +++-
 ...update-and-deb-redist => update-and-deb-redist} |    5 +-
 uni/utils/2tree/{list2tree => 2tree}               |   12 +-
 uni/utils/2tree/ChangeLog                          |    4 +-
 uni/utils/2tree/Makefile.am                        |    2 +-

我可以将 Git 拉取状态列表转换为 SVN 的格式:

M .gitignore
M uni/.gitignore
M uni/package/cooldeb/.gitignore
M uni/package/cooldeb/Makefile.am
M uni/package/cooldeb/VERSION.av
M uni/package/cooldeb/cideb
M uni/package/cooldeb/cooldeb.sh
M uni/package/cooldeb/newdeb
M ...update-and-deb-redist => update-and-deb-redist}
M uni/utils/2tree/{list2tree => 2tree}
M uni/utils/2tree/ChangeLog
M uni/utils/2tree/Makefile.am

但是,一些具有长路径名的条目被缩写,例如uni/package/cooldeb/update-and-deb-redist缩写为...update-and-deb-redist

我想我可以直接使用 Git,也许我可以git pull以特殊格式配置的输出。

任何想法?

编辑

我已经找到解决办法了:

首先,将最后一次和当前的提交保存到变量PREVNEXT

$ PREV=`git show --format=format:%H --summary | head -1`
$ git pull
$ NEXT=`git show --format=format:%H --summary | head -1`

然后,使用特殊格式比较这两个提交:

$ git diff --name-status $PREV $NEXT

这将给出输出:

A       .gitignore
M       uni/.gitignore
A       uni/package/cooldeb/.gitignore
M       uni/package/cooldeb/Makefile.am
M       uni/package/cooldeb/VERSION.av
M       uni/package/cooldeb/cideb
M       uni/package/cooldeb/cooldeb.sh
...

这与 Subversion 的完全相同。

然后,在预览模式下也很容易做到:

$ PREV=`git show --format=format:%H --summary | head -1`
$ git stash
$ git pull
$ NEXT=`git show --format=format:%H --summary | head -1`
$ git diff --name-status $PREV $NEXT
$ git reset --hard $PREV
$ git stash pop

答案1

第一个选项man git-pull是:

   --no-commit

       With --no-commit perform the merge but pretend the merge failed and
       do not autocommit, to give the user a chance to inspect and further
       tweak the merge result before committing.

因此使用git pull --no-commit

编辑:哎呀!这不起作用。正如谢继雷(问题作者)指出的那样,git pull --no-commit仍然会提交。我正在使用git version 1.7.0.4

如果你不知道引入了哪些更改,那么有一种方法可以返回:

git branch bad-branch-1
git log                          # Find the point you want to restore to,
                                 # for example: 35da5f07ca2c5

git reset --hard 35da5f07ca2c5   # Rolls back history and files

相关内容