Git从主分支在另一个分支中拉出

问题描述

我从master创建了一个新分支,并更改了一些文件。我该如何从新创建分支中的master提取文件,并忽略/覆盖当前分支中已更改的文件

解决方法

您可以撤消本地更改,并通过说出以下内容来恢复文件在master分支中的位置:

git checkout master -- .

--告诉Git将接下来出现的内容解释为路径列表,而.则指示所有路径。


如果您使用的是Git 2.23 (August 2019)或更高版本,则可以使用新的(但仍然是实验性git restore命令:

git restore master -- .

来自release notes

引入了两个新命令“ git switch”和“ git restore”,以拆分“检出分支以推进其历史记录”和“检出索引之外的路径和/或树状代码以进行处理”单个“ git checkout”中的“前进当前历史记录”

基本上,git checkout确实收到了两个命令:

  • git switch检出一个分支并相应地更新工作目录
  • git restore从工作目录中的特定提交(或索引)中检出文件
,

有很多方法可以做到这一点。一些如下所示。

  • 如果希望当前分支与本地master分支完全相同,则只需运行以下命令。这将删除您的所有更改。

    $ git reset --hard master
    
  • 如果希望当前分支与远程master分支完全相同,则只需运行以下命令。我们应该获取远程分支,以确保它们都已同步。

    $ git fetch origin
    $ git reset --hard origin/master
    
  • 另一种方法是删除当前分支,并从master创建一个具有相同名称的新分支。这样做之前,如果您有一些未提交的数据,则应将其存储或提交。

    • 要存储未提交的数据,请运行以下命令。

      $ git add .; git stash; git stash drop
      
    • 以提交更改,请运行以下命令。

      $ git add .; git commit -m "just commit & it won't be after a while"
      

    最后通过运行以下命令删除并创建分支。

    $ git checkout master
    $ git branch -D <branch-name>
    $ git branch <branch-name>