我正在研究一些用Python / Django编写的软件,并且刚尝试在我的本地机器上运行git pull origin master
,并获得了输出:
已经是最新的。
但是,我对此表示怀疑,因为我知道自从我上次在办公室以来对服务器上的版本进行了一些更改......
当我上次进入时,服务器上的版本出现了一些错误,这些错误已经破坏了网站,当我不在办公室时,这些错误已得到修复,我现在想要pull
来自服务器的工作版本,以确保在处理本地副本时,我正在处理最新版本,因此当我下次将更改推送到服务器时,不会将已修复的错误推回到服务器上服务器
如何确保我的本地master
分支机构与服务器上的master
保持同步?有没有办法强迫'强迫' git从服务器拉出并覆盖我的本地分支,即使它认为我的本地分支已经是最新的?
答案 0 :(得分:1)
首先,忘记关于分支名称的所有内容。 :-)这里的问题是这些名字几乎是一种暗示。任何人都可以随时随地改变它们。分支名称可以帮助您(和Git)开始查找提交。 名称无关紧要;重要的是提交。
(如果人们对他们使用这些名字的方式保持谨慎和严谨,那么这些提示绝不会误导你。你和你的团队,以及你团队中不的任何人你是谁还要依赖,一切都非常小心和纪律?如果答案是“不”,即使是一年中的某一天,你也要注意提交。从提示开始很好,就像相信咖啡的糖罐确实含有糖。但如果你有一个办公室的恶作剧,咖啡变得奇怪,也许糖碗现在充满了盐。)
你会认为git log
是查看提交的方式......但是,默认情况下它不会显示所有内容。这是故意的:“一切”通常太多了。但是在我看来,默认情况下它显示的通常不是足够的。这可能是Git GUI如此受欢迎的一个原因。
没有完美的观众。有许多可能性,请参阅Pretty git branch graphs和Visualizing branch topology in git。默认情况下,Gitk会显示超过git log
。但是,默认情况下,两者都从HEAD
开始。我个人最常做的是从a dog获取帮助:git log --all --decorate --oneline --graph
。 (我实际上将此作为别名git lola
,但“狗”更难忘!而不是--all
,您可能需要--branches
或--branches --remotes
,但{ {1}}是获取A DOG的唯一途径。)你得到了相同的东西,但在图形中,--all
。
无论如何,重点是这种观点,(a)包括图形和(b)显示所有起点(包括所有分支和远程跟踪分支名称),为您提供更多信息。您将能够看到您拥有他们的提交,并提交他们让您不要“T
有时你想扔掉你所拥有的一切,而不是拥有它们所拥有的一切。这很容易:
gitk --all
(在你自己git reset --hard origin/master
上)。小心这个命令,因为它做了一些你无法撤消的事情!特别是,master
步骤会丢弃未提交的工作树更改,您无法将其恢复。 --hard
步骤还说“我不想要我当前的分支名称(不管是什么,呃,我认为它是git reset
)来保存我的提交,我希望它只记住他们的 master
提交。“所以现在你当前的分支名称(你认为它是origin/master
)只会记住相同的提交master
。更好地检查并确保您当前的分支名称确实是origin/master
,是吗?
(如果它不,那些提交 可以恢复一段时间,这与未保存的工作树工作不同。)
请注意,执行此操作master
时,您刚刚以潜在的无纪律方式移动了自己的git reset
。也许你是办公室恶作剧者。 : - )
答案 1 :(得分:0)
首先,请确保fix-changes
位于remote/master
。
$ git fetch
$ git checkout master
$ git pull origin master
$ git diff master..origin/master # see if there is any difference between 'local-master' and 'remote master'
N.B。 git log
显示所有提交历史记录。使用GitHub
转到您的Browser
回购,查看last commit
same
是remote/master & local/master
的{{1}}。
答案 2 :(得分:0)
是的,您可以强迫git pull -f origin master:master
。
此外,您可以比较服务器和本地主分支之间的最新提交ID。
答案 3 :(得分:0)
首先确保您确实拥有最新的更改:
git fetch
git log origin/master
确保包含您期望的提交。如果它没有那么可能他们没有像你认为的那样在服务器上承诺掌握它们。可能他们被放在另一个分支或其他东西上。您需要检查服务器仓库。我认为git fetch
可能会默默地失败,但我从未见过它。
其次,硬盘将本地分支重置为遥控器:
git reset --hard origin/master
这将跳过任何合并,快进等,并将您的本地分支指向与原点相同的提交并重置您的工作区。