如何检查远程(原始)Git存储库中的更改?


249

执行以下工作流程的Git命令是什么?

情境

我从一个存储库克隆并对本地存储库做了一些自己的提交。同时,我的同事对远程存储库进行了提交。现在,我要:

  1. 检查远程存储库上是否有其他人的新提交,即origin

  2. 假设自上次上拉以来,远程存储库中有3个新提交,我想比较远程存储库中的提交,即 HEAD~3with HEAD~2HEAD~2with HEAD~1HEAD~1with HEAD

  3. 在知道远程更改之后,我想从其他人那里获取最新的提交。

到目前为止我的发现

对于第2步:我知道插入符号的符号HEAD^HEAD^^等和波浪符号HEAD~2HEAD~3等等。

对于第3步:我猜只是一个git pull



链接到您的@Daniele非常棒,甚至带有可自定义的bash脚本。+1
gorbysbm

Answers:


255

您可以git fetch origin更新存储库中的远程分支以指向最新版本。对于与遥控器的区别:

git diff origin/master

是的,您也可以使用插入符号。

如果要接受远程更改:

git merge origin/master

34
差异看起来相反。我发现它更易于使用,git diff HEAD origin/master因此差异显示了接受远程更改后将应用的内容。
cbliard

2
“ git fetch origin”和“ git show-branch * master”对我很有用。
LEA Massiot

159
git remote update && git status 

发现这个对答案,以检查是否需要拉Git中

git remote update使您的远程引用保持最新状态。然后,您可以做几件事之一,例如:

  1. git status -uno会告诉您所跟踪的分支是在前面,后面还是在分支。如果什么也没说,则本地和远程相同。

  2. git show-branch *master 将显示所有名称以master结尾的分支的提交(例如master和origin / master)。

如果-v与您一起使用,则git remote update可以查看更新了哪些分支,因此您实际上不需要任何其他命令。


不够。我必须git pull <remote> <branch>尽快进行后续操作,因为本地分支的尖端位于远程对等的后面。
Overdrivr

3
@Overdrivr,该问题要求一种在将提交提交到本地分支之前检查更改的方法。因此,是的,您必须在检查更改后更新本地分支。
Rajani Karuturi

这是远程来源还是上游?
vikramvi

1
该-v选项不起作用。因为git remote update -verror: unknown switch `v'
Shad

1
@Shad你应该做的git remote -v update不是git remote update -v
拉贾尼Karuturi

34

综合了解“起源”情况的一个好方法是:

git remote show origin

11
但是该命令没有显示出自上次上拉以来在“源”上进行了多少次提交,是吗?我理解的“ git remote show origin”是本地操作,不会通过网络获取信息。
Lernkurve

24

我只是用

git remote update
git status

后者然后报告在我本地的背后有多少个提交。(如果有)

然后

git pull origin master

使我的本地更新:)


13

我经常的问题是相当“任何新的或回购改变”,所以whatchanged来得心应手。在这里找到它。

git whatchanged origin/master -n 1

1
此命令从不存在。谢谢。这就是我想要的
索拉卜·in那

11

一种潜在的解决方案

感谢Alan Haggai Alavi的解决方案,我提出了以下潜在的工作流程:

第1步:

git fetch origin

第2步:

git checkout -b localTempOfOriginMaster origin/master
git difftool HEAD~3 HEAD~2
git difftool HEAD~2 HEAD~1
git difftool HEAD~1 HEAD~0

第三步:

git checkout master
git branch -D localTempOfOriginMaster
git merge origin/master

13
为什么需要为远程版本之间的差异创建一个临时分支?您可以git diff origing/master^ origing/master^^
Pablo Marin-Garcia

@ PabloMarin-Garcia:谢谢。那时我还不知道。
Lernkurve

2

git status即使在获取后,也不总是显示母版与原始/母版之间的差异。如果您希望组合git fetch origin && git status有效,则需要在本地分支和源之间指定跟踪信息:

# git branch --set-upstream-to=origin/<branch> <branch>

对于主分支:

git branch --set-upstream-to=origin/master master

0

因为到目前为止还没有建议...我发现它非常有用...

我只是用

git fetch origin

来获取远程更改,然后使用不错的gitk工具(https://git-scm.com/docs/gitk)来查看本地和待处理的远程提交(及其相关更改),其中涉及--all参数,例如

gitk --all
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.