Git: Best way to add only some parts of a file from another branch?

给你一囗甜甜゛ 提交于 2019-12-06 00:13:31

问题


Let's say you have a branch master and another branch production, both containing a version of the file prog.py, as well as many other files. Imagine that you modify many files in the production branch, including prog.py. Now, what is the best way of having only some changes made on prog.py in the production branch be applied to its version in the master branch?

I started moving to the master branch and importing the file from the production branch:

git checkout master
git checkout production -- prog.py

because I was hoping to be able to do git add -p and select the changes by hand. The problem is that prog.py is both in the working tree and in the index. How can I remove it from the index without touching the working tree?

Or is there a better way of choosing which changes in prog.py should be imported from the production branch into the master branch?


回答1:


I'm not sure if this was true when this question was asked, but with a current version of git you can do the following:

git checkout -p production -- prog.py

and you'll get the same interactive hunk-picker you do for most -p commands.




回答2:


Making small and granular commits that only do one thing, and then later cherry-picking the changes you also want in the other branch using git cherry-pick $commit_id would seem like a reasonable approach.




回答3:


Alright, I just tried git reset, and it did remove the changes stored in the index. git add -p then works as expected, allowing one to choose the individual changes that should be applied (i.e. stored in the index). The non-wanted changes can then be discarded with git commit, and then git reset --hard.

Hopefully the question and this answer will be of interest to someone else! :)

PS: I marked this answer as the accepted one because it does check out a single file, as asked in the original question.



来源:https://stackoverflow.com/questions/3872980/git-best-way-to-add-only-some-parts-of-a-file-from-another-branch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!