Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
875 views
in Technique[技术] by (71.8m points)

version control - Git allows for branch change with unstaged changes

Git is allowing me to change branches when I have changes not staged for commit (modified files).

Is there a configuration for this somewhere?

Edit: At first I thought this was a configuration that I needed to set to disallow changing between branches if there are modified unstaged files. But by Emily's comment, it appears that you're prompted if the files differ between branches, and not prompted otherwise.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

How it decides

A quick experiment shows the following.

Suppose you're on branch dev and you've modified foo.txt. Without committing, you try to check out master. One of two things will happen.

  1. If foo.txt was modified in master in a commit that dev doesn't have, you won't be allowed to switch without committing, because master has a "new" version of the file that conflicts with the unstaged changes.

    To "check out" master, therefore, would require Git to update foo.txt to the newer version that master has, destroying your unstaged changes. To prevent your losing work, it won't change branches.

  2. Otherwise, the modification has been done "since" the version master knows about, and you'll be able to change branches. Git doesn't have to update the file because master has no new information about the file.

For the "whoops" changes

Because of the above, if you have unstaged changes in files on one branch and realize you actually want to commit the changes on another, you may or may not be able to check out the other branch.

You can, however, do the following:

  • git stash save "here's a summary of my changes" (summary will show up in git stash list)
  • git checkout otherbranch
  • git stash pop (which is a combination of git stash apply and git stash drop)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...