我希望将下列操作编写成一个单独的命令,最好是 rake 格式:
换句话说,我希望从中央存储库获得最新的代码,并立即生成自上次提取以来发生的更改的差异。
这与我问的关于 如何在 git 中对分支进行更改的问题非常相似。注意,当使用两个点和三个点时,git diff 与 git log 的行为是不一致的。但是,对于您的应用程序,您可以使用:
git fetch git diff ...origin
之后,一个 git pull将合并到您的头部的变化。
git pull
格雷格的方法应该奏效(不是我,另一个格雷格: P)。关于您的注释,source 是一个配置变量,当您将中央存储库克隆到本地计算机时由 Git 设置。从本质上讲,Git 存储库会记住它的来源。但是,如果需要使用 git-config,则可以手动设置这些变量。
git config remote.origin.url <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
您可以使用 refspecs 相当简单地完成这项工作。
git pull origin git diff @{1}..
这将给您一个当前分支的差异,因为它在拉之前和之后都存在。请注意,如果拉动实际上没有更新当前分支,diff 将给出错误的结果。另一种选择是显式记录当前版本:
current=`git rev-parse HEAD` git pull origin git diff $current..
我个人使用一个别名,它只是按照从最早到最新的倒序(即从最早到最新)显示一个日志,其中不包括自我上次提交以来的所有提交。每次我的 pull 更新分支时都会运行这个命令:
git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}..
如果你把它放到你的 bash 配置文件中,你就可以运行咧嘴笑(git 远程传入)和灌浆(git 远程传出)来查看提交的差异,这是传入和传出的原始主机。
function parse_git_branch { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' } function gd2 { echo branch \($1\) has these commits and \($2\) does not git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local } function grin { git fetch origin master gd2 FETCH_HEAD $(parse_git_branch) } function grout { git fetch origin master gd2 $(parse_git_branch) FETCH_HEAD }