如何使用先前的更改,当前的更改和来自另一个分支的新文件来创建新分支?

问题描述

我的目录中有以下文件

helloworld.go

index.html

main.js

这些都是分支validation的最新提交。

现在我想创建一个包含以下内容的新分支

helloworld.go

index.html [当前分支的最新提交]

main.js [来自特定提交中另一个分支newvalidation文件

newone.c [来自特定提交中另一个分支newvalidation文件]

有可能吗?

解决方法

首先,不要使用confusing and obsolete git checkout command

使用:

第二,有两种方法可以解决您的情况:

  • 您可以从自己所在的位置创建一个新分支,然后从旧提交中还原选择的文件:仅当您要还原的文件很少时,该文件才有效
  • 或者您从旧的提交中创建一个新分支,然后从validation中还原选择的文件:如果您希望从旧的提交中获取所有内容,但又需要验证中的 个文件,则可以正常工作

在第一种情况下:

git switch -c newBranch validation
git restore -s <oldSHA1> -SW -- helloworld.go
git restore -s <oldSHA1> -SW -- main.js
git restore -s <oldSHA1> -SW -- newone.c

这将直接更改工作树和索引,这意味着您只需要做一次提交。

在第二种情况下:

git switch -c newBranch <oldSHA1>
git restore -s validation -SW -- index.htm
,

在某个提交提交时检出文件的一般方法是:

git checkout <SHA-1 of commit> path/to/your/file.ext

因此,您可以将其应用于helloworld.gomain.jsnewone.c,即使用:

# from validation
git checkout -b validation_new
git checkout abc123 helloworld.go
git checkout def456 main.js
git checkout ghi789 newone.c

这时,您可以根据需要将更改添加到索引并提交。如果需要查找以上三个文件的SHA-1哈希,则可以使用git log来完成。