Error when changing to master branch: my local changes would be overwritten by checkout

后端 未结 6 1953
难免孤独
难免孤独 2020-11-30 19:20

This question is similar to this one, but more specific.

I have a project with two branches (staging and beta).

I develop

相关标签:
6条回答
  • 2020-11-30 19:40

    I encountered the same problem and solved it by

    git checkout -f branch
    

    and its specification is rather clear.

    -f, --force

    When switching branches, proceed even if the index or the working tree differs from HEAD. This is used to throw away local changes.

    When checking out paths from the index, do not fail upon unmerged entries; instead, unmerged entries are ignored.

    0 讨论(0)
  • 2020-11-30 19:41

    You can commit in the current branch, checkout to another branch, and finally cherry-pick that commit (in lieu of merge).

    0 讨论(0)
  • 2020-11-30 19:46

    I encountered the same problem and solved it by

    git checkout -f branch

    Well, be careful with the -f switch. You will lose any uncommitted changes if you use the -f switch. While there may be some use cases where it is helpful to use -f, in most cases, you may want to stash your changes and then switch branches. The stashing procedure is explained above.

    0 讨论(0)
  • 2020-11-30 19:52

    This error happens when the branch you are switching to, has changes that your current branch doesn't have.

    If you are seeing this error when you try to switch to a new branch, then your current branch is probably behind one or more commits. If so, run:

    git fetch
    

    You should also remove dependencies which may also conflict with the destination branch.

    For example, for iOS developers:

    pod deintegrate
    

    then try checking out a branch again.

    If the desired branch isn't new you can either cherry pick a commit and fix the conflicts or stash the changes and then fix the conflicts.

    1. Git Stash (recommended)

    git stash
    git checkout <desiredBranch>
    git stash apply
    

    2. Cherry pick (more work)

    git add <your file>
    git commit -m "Your message"
    git log
    

    Copy the sha of your commit. Then discard unwanted changes:

    git checkout .
    git checkout -- . 
    git clean -f -fd -fx
    

    Make sure your branch is up to date:

    git fetch
    

    Then checkout to the desired branch

    git checkout <desiredBranch>
    

    Then cherry pick the other commit:

    git cherry-pick <theSha>
    

    Now fix the conflict.

    1. Otherwise, your other option is to abandon your current branches changes with:
    git checkout -f branch
    
    0 讨论(0)
  • 2020-11-30 20:03

    You can force checkout your branch, if you do not want to commit your local changes.

    git checkout -f branch_name
    
    0 讨论(0)
  • 2020-11-30 20:05

    Your error appears when you have modified a file and the branch that you are switching to has changes for this file too (from latest merge point).

    Your options, as I see it, are - commit, and then amend this commit with extra changes (you can modify commits in git, as long as they're not pushed); or - use stash:

    git stash save your-file-name
    git checkout master
    # do whatever you had to do with master
    git checkout staging
    git stash pop
    

    git stash save will create stash that contains your changes, but it isn't associated with any commit or even branch. git stash pop will apply latest stash entry to your current branch, restoring saved changes and removing it from stash.

    0 讨论(0)
提交回复
热议问题