问题
Is it possible to commit and push changes from one branch to another.
Assume I commited changes in BRANCH1 and want to push them to BRANCH2.
From BRANCH1, is it valid to do:
git push origin **BRANCH2**
And then reset BRANCH1?
回答1:
That will almost work.
When pushing to a non-default branch, you need to specify the source ref and the target ref:
git push origin branch1:branch2
Or
git push <remote> <branch with new changes>:<branch you are pushing to>
回答2:
Certainly, though it will only work if it's a fast forward of BRANCH2 or if you force it. The correct syntax to do such a thing is
git push <remote> <source branch>:<dest branch>
See the description of a "refspec" on the git push man page for more detail on how it works. Also note that both a force push and a reset are operations that "rewrite history", and shouldn't be attempted by the faint of heart unless you're absolutely sure you know what you're doing with respect to any remote repositories and other people who have forks/clones of the same project.
回答3:
It's very simple. Suppose that you have made changes to your Branch A which resides on both place locally and remotely but you want to push these changes to Branch B which doesn't exist anywhere.
Step-01: create and switch to the new branch B
git checkout -b B
Step-02: Add changes in the new local branch
git add . //or specific file(s)
Step-03: Commit the changes
git commit -m "commit_message"
Step-04: Push changes to the new branch B. The below command will create a new branch B as well remotely
git push origin B
Now, you can verify from bitbucket that the branch B will have one more commit than branch A. And when you will checkout the branch A these changes won't be there as these have been pushed into the branch B.
Note: If you have commited your changes into the branch A and after that you want to shift those changes into the new branch B then you will have to reset those changes first. #HappyLearning
回答4:
In my case I had one local commit, which wasn't pushed to origin\master, but commited to my local master branch. This local commit should be now pushed to another branch.
With Git Extensions you can do something like this:
- (Create if not existing and) checkout new branch, where you want to push your commit.
- Select the commit from the history, which should get commited & pushed to this branch.
- Right click and select Cherry pick commit.
- Press Cherry pick button afterwards.
- The selected commit get's applied to your checked out branch. Now commit and push it.
- Check out your old branch, with the faulty commit.
- Hard reset this branch to the second last commit, where everything was ok (be aware what are you doing here!). You can do that via right click on the second last commit and select Reset current branch to here. Confirm the opperation, if you know what you are doing.
You could also do that on the GIT command line. Example copied from David Christensen:
I think you'll find
git cherry-pick+git resetto be a much quicker workflow:Using your same scenario, with "feature" being the branch with the top-most commit being incorrect, it'd be much easier to do this:
git checkout mastergit cherry-pick featuregit checkout featuregit reset --hard HEAD^Saves quite a bit of work, and is the scenario that
git cherry-pickwas designed to handle.I'll also note that this will work as well if it's not the topmost commit; you just need a commitish for the argument to cherry-pick, via:
git checkout mastergit cherry-pick $sha1git checkout featuregit rebase -i ... # whack the specific commit from the history
回答5:
I get a bad result with git push origin branch1:branch2 command:
In my case, branch2 was deleted and branch1 was updated with the new changes.
Thus, if you want the changes only push on the branch2 from the branch1, try these procedures:
- On
branch1:git add . - On
branch1:git commit -m 'comments' On
branch1:git push origin branch1On
branch2:git pull origin branch1On
branch1: revert to the previous commit.
回答6:
you can do this easily
git status
git add .
git commit -m "any commit"
git pull origin (branch name, master in my case)
git push origin current branch(master):branch 2(development)(in which you want to push changes)
回答7:
You have committed to BRANCH1 and want to get rid of this commit without losing the changes? git reset is what you need. Do:
git branch BRANCH2
if you want BRANCH2 to be a new branch. You can also merge this at the end with another branch if you want. If BRANCH2 already exists, then leave this step out.
Then do:
git reset --hard HEAD~3
if you want to reset the commit on the branch you have committed. This takes the changes of the last three commits.
Then do the following to bring the resetted commits to BRANCH2
git checkout BRANCH2
This source was helpful: https://git-scm.com/docs/git-reset#git-reset-Undoacommitmakingitatopicbranch
来源:https://stackoverflow.com/questions/13897717/push-commits-to-another-branch