Maxim
Maxim

Reputation: 13458

Git: Copy source code to new branch without history

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

Answers (3)

Maxim
Maxim

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

Medical physicist
Medical physicist

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

Zlopez
Zlopez

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

Related Questions