Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to push new (rewritten) history to remote repository

Tags:

git

github

Basically, I have an open pull request that I want to fix and at the same time I want to make 1 commit that contains 2 features into 2 seperate commits.

Github repository now looks like this where fix is a new branch:

master c-c-c
            \
     fix c-c-c-c

I created a pull request from fix.

I wanted to change the last commit in fix into 2 commits in my local repository as follows:

master c-c-c
            \
     fix c-c-c-n-n

where n-n are my 2 new commits.

To get to this point locally, I did this:

1. git rebase -i HEAD~2
2. Changed my last commit line to "edit", saved and closed the file
3. git reset HEAD^
4. git stash save
5. Removed the changes I don't want in the first commit
6. git commit -m "commit a" -a
7. git stash apply
8. git commit -m "commit b"

So now I have 2 commits the way I want. The problem is I found a bug that ended up in the pull request. Since I have already pushed to the remote repository, it won't accept my new commits (as the original one is now missing).

I run:

git push origin fix --dry-run

and I get the message:

To [email protected]:<UserName>/<Repository>.git
! [rejected]        fix -> fix (non-fast-forward)
error: failed to push some refs to '[email protected]:<UserName>/<Repository>.git'

I have seen other posts suggest to pull my changes from origin before pushing back again, but won't that basically reset my 2 commits back into the one?

Ideally, what I would like to do is assign the same commit ID to the last commit so it can replace the current one as is. Is there a way to do that? (Note that I didn't run git reset with --hard)

like image 449
NightOwl888 Avatar asked Apr 07 '12 12:04

NightOwl888


People also ask

How do I push changes to my remote repository?

To push the commit from the local repo to your remote repositories, run git push -u remote-name branch-name where remote-name is the nickname the local repo uses for the remote repositories and branch-name is the name of the branch to push to the repository. You only have to use the -u option the first time you push.

Does Force push rewrite history?

Every time you Force Push, you're basically rewriting history.

Can git history be rewritten?

There are many ways to rewrite history with git. Use git commit --amend to change your latest log message. Use git commit --amend to make modifications to the most recent commit. Use git rebase to combine commits and modify history of a branch.


1 Answers

When faced with that problem, a force push has worked for me:

git push --force origin fix
like image 92
Nate Avatar answered Oct 21 '22 14:10

Nate