6

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

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

git checkout master
git checkout production -- prog.py

因为我希望能够git add -p手动进行并选择更改。问题在于prog.py工作树和索引中都存在问题。如何在不触及工作树的情况下将其从索引中删除?

或者有没有更好的方法来选择哪些更改prog.py应该从production分支导入到master分支中?

4

3 回答 3

17

我不确定当这个问题被问到时这是否属实,但使用当前版本的 git 你可以执行以下操作:

git checkout -p production -- prog.py

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

于 2011-12-18T04:02:45.637 回答
4

进行只做一件事的小而细粒度的提交,然后在另一个分支中挑选您也想要的更改,git cherry-pick $commit_id这似乎是一种合理的方法。

于 2010-10-06T13:34:00.037 回答
1

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

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

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

于 2010-10-06T13:34:36.333 回答