如何使我的分支与其对应的远程分支完全相同?

7

本文是我之前关于 git pull 的文章的后续: Git: What does EXACTLY "git pull" do?

假设我想对某个分支执行 "git pull",并且希望我的本地分支副本与远程分支的副本完全相同。如何实现?


1
快速方法:删除您的本地分支并重新拉取。 - Lorenzo Marcon
2
或者 git reset --hard origin/<分支名称> - Oliver Charlesworth
@OliverCharlesworth 当然,在首次获取之后执行此操作。 - Tim Biegeleisen
4个回答

11
假设您已经在相关的分支上(并且正在正确地跟踪其上游),最简单的方法是:
git fetch && git reset --hard FETCH_HEAD

这里使用了特殊的FETCH_HEAD引用,因此您不需要输入上游分支名称或其他任何内容。


你似乎非常有用。 - CrazySynthax

2
这应该能解决问题:
git fetch
git reset --hard origin/{insert branch name}
git clean -fd

如果您希望完全相同,包括删除gitignore的内容,请使用git clean -fdx


1
它并不适用于所有情况。也许拉取的结果是本地版本而不是远程版本。 应该使用 "git reset --hard origin/<分支名称>"。 - CrazySynthax

1
Git pull 始终会执行两项操作。
1) fetches the remote repository
2) either makes a rebase or a merge

所以放弃本地更改的最佳选项是先执行一次获取(fetch),然后重置你的本地分支(branch)到origin/branch。

0

使用 git fetch 获取最新代码后,git reset @{u} 可以将分支指向它的 upstream。使用 git reset --hard @{u} 还会检出该版本,永久性地丢弃工作目录中跟踪文件的任何更改。

如果您想要放弃未跟踪的文件,可以在 bash 中执行以下操作:

bash -c '
  GLOBIGNORE=.:..
  shopt -s dotglob extglob
  rm -rf !(.git)
  git reset --hard @{u}'

当你说“上游分支”时,你是指远程存储库中的相应分支吗? - CrazySynthax
@{u} 是什么?它是分支名称吗? - CrazySynthax
@CrazySynthax:我的意思是[“upstream”](https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/)。 - Ry-

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接