我想将以下操作编写成一个命令:
获取我的本地git存储库的版本.
Git拉最新的代码.
Git diff从我在步骤#1中提取的版本到现在在我的本地存储库中的版本.
换句话说,我想从中央存储库中获取最新的代码,并立即生成自上次拉出以来所发生变化的差异.
您可以使用refspecs相当简单地完成此操作.
git pull origin git diff @{1}..
这将为你提供当前分支的差异,因为它在拉动之前和之后存在.请注意,如果pull实际上没有更新当前分支,则diff会给出错误的结果.另一种选择是明确记录当前版本:
current=`git rev-parse HEAD` git pull origin git diff $current..
我个人使用一个别名,它只是向我显示一个日志,以相反的顺序(即最旧到最新),sans合并,自我上次拉动后的所有提交.每次我的拉动更新分支时我都会运行它:
git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..
格雷格的方式应该有效(不是我,其他格雷格:P).关于您的注释,origin是一个配置变量,当您将中央存储库克隆到本地计算机时由Git设置.从本质上讲,Git存储库会记住它的来源.但是,如果需要使用git-config,可以手动设置这些变量.
git config remote.origin.url
其中url是中央存储库的远程路径.
这是一个应该工作的示例批处理文件(我还没有测试过).
@ECHO off :: Retrieve the changes, but don't merge them. git fetch :: Look at the new changes git diff ...origin :: Ask if you want to merge the new changes into HEAD set /p PULL=Do you wish to pull the changes? (Y/N) IF /I %PULL%==Y git pull
这与我询问如何在git中对分支进行更改的问题非常类似.请注意,当使用两个点与三个点时,git diff与git log的行为不一致.但是,对于您的应用程序,您可以使用:
git fetch git diff ...origin
之后,a git pull
会将更改合并到您的HEAD中.