Git:只添加来自另一个分支的文件的某些部分的最佳方法?

Git:只添加来自另一个分支的文件的某些部分的最佳方法?,git,branch,commit,git-checkout,Git,Branch,Commit,Git Checkout,假设您有一个分支master和另一个分支production,这两个分支都包含一个版本的文件prog.py,以及许多其他文件。假设您修改了生产分支中的许多文件,包括prog.py。现在,在prog.py分支中只对prog.py进行一些更改,并将其应用于master分支中的版本的最佳方法是什么 我开始移动到master分支,并从production分支导入文件: git checkout master git checkout production -- prog.py 因为我希望能够手动执行g

假设您有一个分支
master
和另一个分支
production
,这两个分支都包含一个版本的文件
prog.py
,以及许多其他文件。假设您修改了生产分支中的许多文件,包括
prog.py
。现在,在
prog.py
分支中只对
prog.py
进行一些更改,并将其应用于
master
分支中的版本的最佳方法是什么

我开始移动到
master
分支,并从
production
分支导入文件:

git checkout master
git checkout production -- prog.py
因为我希望能够手动执行git add-p并选择更改。问题是
prog.py
既在工作树中,也在索引中。如何在不接触工作树的情况下将其从索引中删除


或者有没有更好的方法来选择应将
prog.py
中的哪些更改从
生产
分支导入
分支?

进行只做一件事的小而细粒度的提交,然后,稍后cherry使用
git cherry pick$commit\u id
在另一个分支中选择您也想要的更改似乎是一种合理的方法。

好的,我刚刚尝试了
git reset
,它确实删除了存储在索引中的更改
git add-p
然后按预期工作,允许用户选择应应用的单个更改(即存储在索引中)。然后可以使用
git commit
放弃不需要的更改,然后使用
git reset--hard

希望这个问题和这个答案会引起其他人的兴趣!:)


PS:我将此答案标记为已接受答案,因为它确实签出了一个文件,如原始问题中所述。

我不确定当问此问题时这是否正确,但使用当前版本的git,您可以执行以下操作:

git checkout -p production -- prog.py

您将获得与大多数
-p
命令相同的交互式大块选择器。

谢谢。cherry pick允许您在单个文件中对更改进行cherry pick吗?它会对提交进行cherry pick操作,如果您没有按照您可能希望的那样精细地进行提交,那么您以后肯定可以修改提交。例如,
git重置头~1
,和
git add-p
,以及
git commit-c$commit\u id
,谢谢!我把公认的答案从我的改为你的,因为你的方法更有效。