How do I recover from a commit –amend if I already pushed the original commit?

Scenario: I commit, push to the remote server, and then commit something else with –amend. If I try to push again, I’ll get an error because I changed history that was already pushed.

  1. Lets say I don’t care about the amended changes, how do I undo this so my history looks like the remote history (discard the –amend changes)?
  2. Lets say I do care about the amended changes, how do I turn the amended commit into a stand alone commit so history looks like this:

  3. Default filters in SourceTree history
  4. Is there a bi-directional bridge between p4 and git?
  5. Can I work with Git command line if I've checked a project out using Eclipse's EGit?
  6. How can i make ZSH use the latest git version?
  7. Squash all commits in branch in git
  8. git request-pull from local branch to remote master
  9.        commit 1            <-           commit 2
    (already pushed to server) <- (originally from amended commit)
    

I’m trying to avoid having to use a push -f.


This is a very similar question but there is a key difference: In that question, he hasn’t pushed commit 1 to a remote repo yet. In my question, I have.

  • How to do sparse checkout in git using Java
  • How to get TFS repo ID from path (w/LibGit2Sharp?)
  • gitolite run hook on 'wild' repository creation
  • Understandability of git, mercurial, bazaar source code bases
  • Using git filters to ignore a specific line in json file
  • Git problems with git push --all
  • One Solution collect form web for “How do I recover from a commit –amend if I already pushed the original commit?”

    I’ll assume your remote is called origin, and your branch is called master. Adjust as needed.

    Lets say I don’t care about the amended changes

    Then you can use git reset --hard origin/master. This sets your current branch to exactly what is on the remote, and updates your index and worktree to match.

    Lets say I do care about the amended changes

    Then you can use git reset --soft origin/master. This sets your current branch to exactly what is on the remote, but does not update your index or worktree to match. You can then use git commit to create a new commit containing your added changes.

    Git Baby is a git and github fan, let's start git clone.