
Mailing List Archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[tlug] Git: bring in a file from another branch
- Date: Mon, 11 Jul 2011 13:59:10 +0900
- From: Darren Cook <darren@example.com>
- Subject: [tlug] Git: bring in a file from another branch
- User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110424 Thunderbird/3.1.10
Sometimes to really understand a tool you have to start using it for
real work, and that is where I'm at with git. I'll start a different
thread for one of my questions, which I think is more about ssh. But
before that I'm really struggling doing things that should be simple.
I've these three branches:
master: git clone of a github repository. (Note, an open source
*library*, not an application.)
custom: a branch of master, with my bug fixes and new features that
are fed back to the main project.
myapp: a branch of custom, adding application code that uses this
library.
I naturally do my development on the myapp branch. I've now changed one
of the library files, that I want to feed back to custom. I've already
been burnt by this nieve approach:
git checkout custom
git merge myapp
That brings in all my application code. I'd then read I just specify the
particular commit I want. So this time I'd been careful to use two
different commits in myapp, one for library code, one for my application
files.
$ git merge 160ef92
Updating e7a7f3f..160ef92
Fast-forward
darren_thoughts.txt | 124 +++++++++++
...
Grrr... I.e. it brings in all files from "myapp" [1]. I've searched in
vain for an option to say "just merge this one commit" or "just merge
this one file from that branch", or "just merge with files that already
exist in this branch, and don't create new files".
But it must be possible? If not, how do people develop closed-source
code, using open-source libraries, where they sometimes want to add
features to the libraries?
Just in case you don't understand what I'm trying to do, here is the way
I'll do it if git doesn't support this style of development:
git checkout myapp
cd lib
cp abc{,.new} #Preserve the file
git checkout custom
cd lib
mv abc.new abc
git commit -m "..." abc
(where the ... will be the commit message I used when I added it to the
myapp branch)
Also, is it possible to veto a directory from being checked out in a
certain branch? I.e. the "custom" branch has the "lib" and "examples"
directories. The "myapp" branch has its own "myapp" directory. I want to
say, under no circumstances, ever [2], should code from the "myapp"
directory end up in the "custom" or "master" branches.
Thanks in advance,
Darren
[1]: By the way, to undo the mess the usually all-powerful:
git reset --hard
is not enough. You have to specify the commit you had before. Luckily
the above merge message gives it. I.e.
git reset --hard e7a7f3f
[2]: No, really, I mean it :-) The first time this happened to me, git
checkout had brought in the settings file from myapp without my
noticing, and my *passwords* had been pushed to my fork repository on
github. I didn't notice until browsing the files using the github web
interface! I quickly deleted the whole repository on github and started
over fresh :-(.
--
Darren Cook, Software Researcher/Developer
http://dcook.org/work/ (About me and my work)
http://dcook.org/blogs.html (My blogs and articles)
Home |
Main Index |
Thread Index