Reputation: 13458
I have 2 branches in git repository: common
and myown
.
I want to copy the source from one branch to another branch but I want to see in history of common
branch only commits related to feature migration (from myown
to common
).
Is it possible to copy the source without the history or is a new repository required?
In addition it can be necessary to merge from common
to myown
and after some changes copy source back as new commit (and only as that commit - without history of all other commits as I said previously).
Upvotes: 23
Views: 21855
Reputation: 13458
It looks that I have figured out how to do it. For example we have branch myown
.
And we need to create new one empty (without history):
git checkout --orphan common
Now we need to add files:
git add .
And commit all:
git commit -m "Initial"
You can see in log only this commit (not all made in myown branch). Now we can checkout myown branch and continue work:
git checkout myown
We can do multiple commits in own branch (similar to regular work):
git commit -m "feature1"
...
git commit -m "feature2"
Now we have committed both and log contains both. We need to copy that to common
branch and name it "release1"
git checkout common
git merge --squash myown
git commit -m "release1"
That's all for my first part of question.
Also it is easy to commit to common
repository (small change/fix for example related to release1 itself). You can make regular merge to put code back to myown
branch.
Upvotes: 17
Reputation: 2594
Clean the folder but keep hidden files/folders:
mkdir ../delete
mv * ../delete
rm -rf ../delete
Copy source code from branch:
git checkout <branch> .
Upvotes: 0
Reputation: 700
I found a faster way that can be used:
git checkout <branch> -- .
This will replace the content of the currently checkouted branch by the content of the <branch>
.
This doesn't copy <branch>
commit history.
If you just want to checkout only some files just replace the .
with the file paths from <branch>
.
EDIT: I found out that this will only replace current files and it will not delete files that are not on the <branch>
.
It is then better to run rm -rf
before doing the checkout.
Upvotes: 39