做git pull时如何强制更新?

时间:2010-12-29 01:53:21

标签: git

我正在做一个开源lib的git pull,我不在乎我的本地副本是什么我只想用原始版本更新它。

即。它可以吹走我当地的变化。

3 个答案:

答案 0 :(得分:75)

这应该可以解决问题:

git reset --hard HEAD
git pull

答案 1 :(得分:30)

git fetch
git checkout origin/name_of_branch  # correct state but in 'head without a name'
git checkout -B name_of_branch      # overwrite current tree onto name_of_branch

这会将远程跟踪分支检查到没有名称的头部,然后您可以查看并检查您是否满意。无论何时你想要(甚至在更改或提交之后),第二个git checkout都会用'name_of_branch'标记当前树,即使它必须删除旧的name_of_branch来执行此操作。


编辑:'多么疯狂的命令行语法'

git命令的语法似乎不直观。事实上,这是Git数据模型不直观。这是一个不错的设计,但因为它可以与文件,分支机构一起使用,其提交方式比其他版本控制系统更灵活,更强大。一旦你了解这些东西在Git中是如何工作的,命令行就会很有意义,你将能够准确地猜出如何做复杂的事情。

  • git fetch提取自上次以来origin服务器上发生的所有更新。 Git将从服务器获取的内容与更新,合并等任何分支分开。所有名为origin/XXX的分支都是您的服务器上最新版本的。它们不是远程分支,而是远程跟踪分支,跟踪远程分支的本地分支。执行git fetch时,您需要更新它们,而不会触及任何自己的分支。当您执行git mergegit rebase等操作时,您可以使用提取的版本,而无需从服务器获取更新的副本。这意味着您可以控制何时发出网络请求(如果您并不总是连接到服务器),并且可以“获取”服务器的快照,然后随意合并。 如果有疑问,请先git fetch
  • git checkout origin/name_of_branch git checkout做了两件事。它将您的文件更新到该分支,并将HEAD设置为该分支。文件的东西是你所期望的。 HEAD事件意味着当您提交时,它们将添加到HEAD指向的分支的末尾。 IOW,checkout同时执行输出 - 编写正确版本的文件,并准备输入 - 准备好存储您将要执行的提交正确的地方。如果您签出名为foo的分支,您的树将更改为foo中保存的状态,您执行的下一次提交将添加到foo。在origin\xyz的情况下,您无法将更改写入origin分支 - 这些更改跟踪origin服务器上的内容并且无法直接提交。因此,结帐更新文件,并将HEAD设置为空 - 一个未命名的分支。这会阻止您意外地将新签出的内容提交回您正在使用的上一个分支,事实上,在您拥有目标分支之前,git会严重阻止您,直到您拥有目标分支。
  • git checkout -B name_of_branch 像往常一样,当git使用一个命令执行两个不同的操作时,它们都可以单独配置。因此,checkout所做的第二部分,将HEAD设置为您要提交的分支,可以是新分支,而不是您正在检出的分支,如果您使用{ {1}}选项。因此-B会将您的所有文件设置为git checkout -B new_stuff old_stuff中的状态,但您已准备好将提交内容写入新分支old_stuff。这是一项常见任务,可以分两步保存您检出分支然后分叉。现在,几乎所有git命令的参数都可以省略,而git将做最明显的事情。在这种情况下,即根据您所在的创建一个新的分支,而不是您想要结帐的分支。所以git接受你所在的未命名分支,并创建一个名为new_stuff的新分支,你可以开始提交。 请注意,一个案例字母“B”表示“强制”。如果你使用“-b”git会拒绝覆盖已经存在的分支。使用“-B”它将继续执行而不会发出警告或确认。

答案 2 :(得分:10)

首选,下意识,解决方案是:git reset --hard origin/master

它是专家和初学者的全能解决方案,可以迅速完成工作。 虽然在没有任何警告的情况下吹走所有未提交的更改。

更安全命令更难以输入:git checkout -B master origin/master

输入别名:

git config --global alias.become '!git checkout -B "$(git symbolic-ref --short HEAD)"'

从此以后,可以输入:git become origin/master