了解git分支和暂存文件

时间:2011-03-24 10:46:18

标签: git

我对git中分支的好处感到有点困惑。

如果我创建一个分支,比如说b1并切换到这个分支,如果我切换回主分支,我所做的任何更改都是可见的。

在主分支中执行git状态显示b1分支的更改。

我知道需要首先在b1中提交更改,但是如何管理多个分支而不会意外地从另一个分支提交更改?

2 个答案:

答案 0 :(得分:1)

如果您在切换到master之后立即注意到您忘记暂存或提交某些更改,则可以立即切换回git checkout b1,然后提交它们。

但是,你是对的,在错误的分支上提交更改非常容易。幸运的是,git的分支非常轻量级 - 它们只是指向提交图中分支尖端的指针 - 而git有很好的工具可以重写历史记录,使其看起来像你想要的那样。你需要做什么取决于你所做的事情的顺序,但是有关Stack Overflow的很多的问题可以解决这个问题。 (或者,如果不清楚,你可以问一个新的。)这是一个简单的例子:

...或者如果你在master上做了很多提交,你突然意识到这些提议太有争议了,而且应该在一个新的主题分支上,你可以做到以下几点:

# Check that git status is clean and you really are on the master branch:
git status

# Create a branch based on your current position:
git branch controversial

# Move master back to the last non-controversial commit, making
# sure that the working tree and index match:
git reset --hard <NON-CONTROVERSIAL-COMMIT>

如果你现有的分支b1上已经有很多提交,那么你可以从主人那里挑选那些提交:

# Switch back to `b1`:
git checkout b1

# Cherry-pick the commits that you'd rather were on b1:
git cherry-pick <CONTROVERSIAL-COMMIT-A>
git cherry-pick <CONTROVERSIAL-COMMIT-B>

# Switch back to `master`:
git checkout master

# Reset master back to the last non-controversial commit, making
# sure that the working tree and index match:
git reset --hard <NON-CONTROVERSIAL-COMMIT>

...如果您在主机上有批次提交,应该在b1上,您可以使用git rebase

简而言之,很容易从这种事情中恢复 - 你只需要了解提交图形在你所处的位置,以及你想要的样子。

答案 1 :(得分:0)

如果从命令行使用git,最好的办法是将当前分支写入bash提示符,例如

http://railstips.org/blog/archives/2009/02/02/bedazzle-your-bash-prompt-with-git-info/

这样你就不必一直输入“git branch”来知道你现在提交的分支。