问题描述
我的目录中有以下文件,
helloworld.go
index.html
main.js
这些都是分支validation
的最新提交。
helloworld.go
index.html [当前分支的最新提交]
有可能吗?
解决方法
首先,不要使用confusing and obsolete git checkout
command
使用:
-
git switch
创建分支 -
git restore
以更新文件(与我described here一样)
第二,有两种方法可以解决您的情况:
- 您可以从自己所在的位置创建一个新分支,然后从旧提交中还原选择的文件:仅当您要还原的文件很少时,该文件才有效
- 或者您从旧的提交中创建一个新分支,然后从
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.go
,main.js
和newone.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
来完成。