Yubin Ruan <ablacktshirt@xxxxxxxxx> writes: > I think it would be better if git can warn use if we switch to another branch > without committing the modification. Git will warn if the modification is based > on a commit different from where the checkout happened. > > For example, say I am now on branch 'master' and all files *clean*. Now if I do: > $ git checkout -b issue > and make some changes to a file: > $ echo "modification on branch issue" >> lala.txt > and then switch back to branch 'master': > $ git checkout master > and git can see the changes: > $ git status > On branch master > Changes not staged for commit: > (use "git add <file>..." to update what will be committed) > (use "git checkout -- <file>..." to discard changes in working directory) > > modified: lala.txt > > no changes added to commit (use "git add" and/or "git commit -a") > > Now, if I do "git checkout -- lala.txt", then I will lose that change on branch > 'issue' too!!! There may be a fundamental misunderstanding here. In Git, changes you make in the working tree do *not* belong to any branch. The request "git checkout -- lala.txt" you made in this step does *not* say "Hey, Git, these changes to lala.txt are not necessary in the 'master' branch". It says "I started editing lala.txt, but it turns out that I do not need that change at all, anywhere, please remove it." If you meant the changes while you were on "issues" branch were not yet ready to be committed, but now you want to work on "master" branch without having to worry about these changes, "git stash" may be a useful tool. Alternatively, you can just create a temporary commit while on "issues" branch before checking out "master" branch to work on something else, and when you are ready to continue working on the "issues" branch, check out "issues" branch and either (1) start with "reset HEAD^" or (2) just continue working on it and conclude with "commit --amend".