我有一个名为branch1的分支,其中有10个文件。当我创建新的分支branch2时,我只想选择其中的四个文件放到新的分支里。
在git中是否可能实现这一点,因为在创建新分支时?
创建新分支,删除该分支中的所有文件,从另一个分支检出一些文件并提交更改:
# create a new branch
git checkout -b branch_name
# remove all files for this branch
git rm -rf .
# retrieve some files from master branch
git checkout master -- file1 file2 file3 file4
# commit changes
git commit -m "create new branch"
HEAD
的提交。最后,将新提交写入分支名称,使其成为当前的/ HEAD
提交。分支名称随后指向最新提交(HEAD
文件仅包含分支名称;它是指向提交的分支名称)。git ls-files
。对于更详细的输出,请使用 git ls-files --stage
,它显示已占用哪些索引槽(可能会有多个,在冲突合并期间可能会有多个,但除此之外,一切都在槽零中)。git checkout
将文件复制到索引中。git checkout <commit-specifier> -- <path> [ <path> ... ]
此命令会将指定提交版本中每个 <path>
的文件复制一份到索引中,分支名称指向该分支上的 tip 提交版本,但在此处可以使用来自 gitrevisions
的任何内容。然后再从索引中复制到工作树中。
你也可以通过从工作树中取出文件并将其复制到索引中来实现。
git add <path> [ <path> ... ]
这个命令会将指定路径下工作区的内容复制到索引中(具体是放在零号插槽中,将覆盖其他插槽的内容,这也是为什么它能解决合并冲突的原因)。
如果要从索引中删除文件,请使用git rm
命令,和git add
命令类似。不过需要注意的是,这个命令会将文件从索引和工作区都删除。如果只想从索引中删除,可以使用git rm --cached
命令。
对于复杂的脚本操作,可以使用git update-index
直接对索引进行更改。但是,这需要更熟悉Git内部机制(例如,你必须先逐个哈希blob对象,并知道何时使用--add
、--replace
等参数)。