2

我是 git 新手,来自 clearcase,我不明白为什么会发生以下情况:

假设我创建了一个 git private dev 分支并对其中的文件进行了一些更改。

现在,我需要做一些其他不相关的工作并检查 master 分支。

Git 会自动将我的更改从我的私有分支转移到我的本地主分支。

我觉得这很反直觉。我拥有私有开发分支的原因是因为我不希望我的更改在我准备好之前转到其他地方。为什么 git 在没有我这么说的情况下移动它们。

是的,有 git stash,但是一旦你有几个开发人员并行运行或者你需要经常切换,那么跟踪 stash 是一件苦差事。我宁愿不要在分支结账时进行更改。如果您在疯狂的时刻忘记藏匿,恐怖就会成为您的朋友。

我是否缺少一些可以避免这种情况的配置?

非常感谢!

4

3 回答 3

3

private_dev最简单的做法是在签出 master 之前 将更改提交到分支。

我宁愿不要在分支结账时进行更改。

甚至有两个回购:

  • 一个你从不推送的(并且你可以在private_dev分支中提交)
  • 在其中您仅拉出master分支(从第一个本地私有仓库),然后推送到您想要的任何远程。

这样,您永远不会误推您的private_dev分支。

于 2013-06-27T20:22:15.457 回答
1

这是我喜欢做的事情:

git config --global alias.temp '!git add -A && git commit -m "Temp"'
git config --global alias.pop 'reset HEAD~'

现在,当您想将现有工作留在一个分支并切换到另一个分支时:

git temp
git checkout other_branch

当你想切换回来时:

git checkout original_branch
git pop
于 2013-06-27T20:46:11.857 回答
1

我的猜测是您没有将更改提交到您的私有分支,因此 git 将它们视为对工作目录的未跟踪更改。当您签出另一个分支时,例如master并且未跟踪的更改不会导致任何冲突,git 不会做任何修改来修改它们。这是一件好事,因为否则您可能会覆盖您一直在做的工作。

为了避免这种情况,请务必在运行git add之前git commit更改git checkout分支。或者,您可以使用git stash将更改存储为临时提交。当您通过结帐返回您的私有分支时,运行git stash apply以检索您以前的更改或git stash pop检索它们并将它们从存储堆栈中删除。

于 2013-06-27T20:50:42.460 回答