如何将“master”重置为“origin/master”?

Xiè*_*léi 270 git

我可以以更简单的方式执行以下操作吗?

git checkout origin/master
git branch -D master
git branch master
git checkout master
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 383

正如KindDragon回答所提到的,您可以master直接重新创建origin/master

git checkout -B master origin/master
Run Code Online (Sandbox Code Playgroud)

git checkout手册页 提到:

如果-B给定,<new_branch>如果不存在则创建;否则,它被重置。这是交易等价物

$ git branch -f <branch> [<start point>]
$ git checkout <branch>
Run Code Online (Sandbox Code Playgroud)

自 Git 2.23+(2019 年 8 月)以来,由于git checkout太混乱,新的(仍处于实验阶段)命令是git switch

git switch -C master origin/master
Run Code Online (Sandbox Code Playgroud)

那是:

-C <new-branch>
--force-create <new-branch>
Run Code Online (Sandbox Code Playgroud)

类似,--create除了如果<new-branch>已经存在,它将被重置为<start-point>
这是一个方便的快捷方式:

$ git branch -f <new-branch>
$ git switch <new-branch>
Run Code Online (Sandbox Code Playgroud)

最初建议:

就像是:

$ git checkout master

# remember where the master was referencing to
$ git branch previous_master

# Reset master back to origin/master
$ git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

第 2 步是可选的。


小智 154

Git 支持这个命令:

git checkout -B master origin/master
Run Code Online (Sandbox Code Playgroud)

检查origin/master分支,然后master在那里重置分支。

  • 唯一正确的答案。 (5认同)
  • 节省四次击键——你不需要引号。只是: git checkout -B master origin/master (3认同)

Ale*_*ird 31

我认为与此选项相比,即使是 VonC 的答案也具有复杂性:

git update-ref refs/heads/master origin/master
git reset --hard master
Run Code Online (Sandbox Code Playgroud)

git 自动记录 ref 的每个值(通过 reflog)。因此,在您运行该命令后,请master@{1}参考 master 的先前值。

VonC 的答案是正确的,但它浪费时间将 master 的旧值签出到文件系统中。

如果您关心 repo 中的孤立对象,那么您可以运行 git gc


小智 29

如果您已经在,master您可以执行以下操作:

git reset --hard origin/master

它将本地master分支指向远程分支origin/master并丢弃工作目录中的任何修改。

  • 并且会删除文件!如果你已经创建/编辑过文件,并在它们上面运行了“git add”,这个命令将删除它们。被警告。 (2认同)