I was working on a git branch and was ready to commit my changes, so I made a commit with a useful commit message. I then absentmindedly made minor changes to the code that are not worth keeping. I now want to change branches, but git gives me,
error: You have local changes to "X"; cannot switch branches.
Can I change branches without committing? If so, how can I set this up? If not, how do I get out of this problem? I want to ignore the minor changes without committing and just change branches.
This question is related to
git
branch
git-checkout
well, it should be
git stash save
git checkout branch
// do something
git checkout oldbranch
git stash pop
git checkout -f your_branch_name
if you have troubles reverting changes:
git checkout .
if you want to remove untracked directories and files:
git clean -fd
If you want to discard the changes,
git checkout -- <file>
git checkout branch
If you want to keep the changes,
git stash save
git checkout branch
git stash pop
I created a .gitconfig
alias for this:
[alias]
spcosp = !"git stash push && git checkout \"$@\" && git stash pop --index #"
To change to new-branch-name
, use:
git spcosp new-branch-name
And any non-commited file and index changes will be kept.
is to force checkout a branch
git checkout -f <branch_name>
Force checking out a branch is telling git to drop all changes you've made in the current branch, and checkout out the desired one.
or in case you're checking out a commit
git checkout -f <commit-hash>
"thought that I could change branches without committing. If so, how can I set this up? If not, how do I get out of this problem?"
The answer to that is No, that's literally the philosophy of Git that you keep track of all changes, and that each node (i.e. commit) has to be up-to-date with the latest changes you've made, unless you've made a new commit of course.
Then stash them using
git stash
and then to unstash your changes in the desired branch, use
git stash apply
which will apply you changes but keep them in the stash queue too. If you don't want to keep them in the stash stack, then pop them using
git stash pop
That's the equivalent of apply
and then drop
switching to a new branch losing changes:
git checkout -b YOUR_NEW_BRANCH_NAME --force
switching to an existing branch losing changes:
git checkout YOUR_BRANCH --force
To switch to other branch without committing the changes when git stash doesn't work. You can use the below command:
git checkout -f branch-name
If you want to keep the changes and change the branch in a single line command
git stash && git checkout <branch_name> && git stash pop
If you have made changes to files that Git also needs to change when switching branches, it won't let you. To discard working changes, use:
git reset --hard HEAD
Then, you will be able to switch branches.
Note that if you've merged remote branches or have local commits and want to go back to the remote HEAD you must do:
git reset --hard origin/HEAD
HEAD
alone will only refer to the local commit/merge -- several times I have forgotten that when resetting and end up with "your repository is X commits ahead.." when I fully intended to nuke ALL changes/commits and return to the remote branch.
Follow these steps:
git stash save
git checkout branch
git stash pop
None of these answers helped me because I still had untracked files even after reset and stash. I had to do:
git reset --hard HEAD
git clean -d -f
Close terminal, delete the folder where your project is, then clone again your project and voilá.
Follow,
$: git checkout -f
$: git checkout next_branch
Source: Stackoverflow.com