我有两个完全合并在一起的分支。

然而,在合并完成后,我意识到一个文件已经被合并弄乱了(别人做了一个自动格式化,啊),在另一个分支中更改到新版本会更容易,然后在把它带入我的分支后重新插入我的一行更改。

Git中最简单的方法是什么呢?


当前回答

我将使用git恢复(从git 2.23开始可用):

git restore --source otherbranch path/to/myfile.txt

为什么这比其他选择更好呢?

默认情况下,git restore只修改工作目录中的文件

Git checkout otherbranch——path/to/myfile.txt将文件复制到工作目录(磁盘上的文件),同时也复制到暂存区域。它与手动复制文件并在其上执行git add具有相同的效果。Git恢复默认只更改工作目录。

为了得到与git checkout otherbranch——path/ To /myfile.txt相同的结果,你可以编写git restore——source otherbranch——staging——worktree path/ To /myfile.txt

默认情况下,当文件在另一个分支中不存在时,git restore会从工作目录中删除文件

Git restore可以使用Git restore——source otherbranch path/to/dir恢复整个文件夹。你可以用git checkout做类似的操作,但是git restore默认会删除其他分支中不存在的文件。要获得git签出行为,请使用——overlay选项。

例如,如果在没有——overlay选项的情况下,otherbranch上的文件比当前工作目录中的文件少(并且这些文件被跟踪),git restore将删除它们。但这是一个很好的默认行为,因为你很可能希望目录的状态是“与其他分支相同”,而不是“与其他分支相同,但有来自我当前分支的额外文件”。

为了得到与git checkout otherbranch——path/ To /dir相同的结果,你可以编写git restore——source otherbranch——staging——worktree——overlay path/ To /dir

git恢复不使用shell重定向来创建文件(Powershell特有的问题)

>的路径/to/myfile.txt使用标准的shell重定向。如果使用PowerShell,则文本编码可能存在问题,如果是二进制文件,则可能导致损坏文件。使用git恢复更改文件全部由git可执行文件完成。

其他回答

我将使用git恢复(从git 2.23开始可用):

git restore --source otherbranch path/to/myfile.txt

为什么这比其他选择更好呢?

默认情况下,git restore只修改工作目录中的文件

Git checkout otherbranch——path/to/myfile.txt将文件复制到工作目录(磁盘上的文件),同时也复制到暂存区域。它与手动复制文件并在其上执行git add具有相同的效果。Git恢复默认只更改工作目录。

为了得到与git checkout otherbranch——path/ To /myfile.txt相同的结果,你可以编写git restore——source otherbranch——staging——worktree path/ To /myfile.txt

默认情况下,当文件在另一个分支中不存在时,git restore会从工作目录中删除文件

Git restore可以使用Git restore——source otherbranch path/to/dir恢复整个文件夹。你可以用git checkout做类似的操作,但是git restore默认会删除其他分支中不存在的文件。要获得git签出行为,请使用——overlay选项。

例如,如果在没有——overlay选项的情况下,otherbranch上的文件比当前工作目录中的文件少(并且这些文件被跟踪),git restore将删除它们。但这是一个很好的默认行为,因为你很可能希望目录的状态是“与其他分支相同”,而不是“与其他分支相同,但有来自我当前分支的额外文件”。

为了得到与git checkout otherbranch——path/ To /dir相同的结果,你可以编写git restore——source otherbranch——staging——worktree——overlay path/ To /dir

git恢复不使用shell重定向来创建文件(Powershell特有的问题)

>的路径/to/myfile.txt使用标准的shell重定向。如果使用PowerShell,则文本编码可能存在问题,如果是二进制文件,则可能导致损坏文件。使用git恢复更改文件全部由git可执行文件完成。

使用checkout命令:

  git diff --stat "$branch"
  git checkout --merge "$branch" "$file"
  git diff --stat "$branch"

抱歉,在恢复文件之前没有人提到这个 你真的想预览与该分支相关的局部更改,因此:

git diff <other-branch-name> -- <filename>

然后当你接受一个丢失(覆盖),你可以跟随:

git restore --source <other-branch-name> <filename>
or
git checkout <other-branch-name> <filename>

按照madlep的回答,您还可以使用目录blob从另一个分支复制一个目录。

git checkout other-branch app/**

至于OP的问题,如果你只改变了一个文件在那里,这将工作良好。

确保您所在的分支机构需要文件的副本。 例如:我想要子分支文件在master,所以你需要签出或应该在master git签出master 现在检出您想要从子分支到主分支的特定文件, Git checkout sub_branch file_path/my_file.ext 这里的sub_branch指的是你要复制的文件后面跟着文件名。