我一直在这里寻找答案,似乎我可能只是对git分支应该如何工作做出错误的假设。
我有master
分支,我创建了一个名为profiles
的功能分支,我正在为配置文件做一些特定的工作。在处理配置文件时,我更改了5或6个文件,并添加了另外5或6个新文件。我需要切换回master
分支来修复一个快速错误,并注意到所有新文件和修改过的文件。我想这是有道理的,因为git不会从master
分支中删除未跟踪的文件,并将它们带回我的profiles
分支,因为它们实际上是未跟踪的。但是对现有文件的更改又如何呢?它们为什么会出现在主分支中。
这是什么最好的做法。我还没准备好在本地提交更改。我应该只是隐藏所有这些更改,切换到master
,进行小修补,切换回profiles
然后重新应用存储?
感谢任何帮助。感谢
答案 0 :(得分:35)
“我还没准备好在本地提交更改。”
git中的提交是本地的东西,可以撤消,重做和重新重做。只有当你将提交推送到需要注意的地方时才会这样。
另外,提交对gitk
这样的本地工具是可见的,并且可以对它们进行差异处理,并且可以重新定位到其他提交等等。这是一个非常强大的工具。学会使用它。
我经常这样做:
git add .; git commit -a -m 'WIP'
如果我认为我可能会被打断,只是为了隐藏当前工作树中的所有内容。如果我做了一些更改,我会使用:
git add .; git commit --amend
就地更新我的“WIP”提交。当我终于为真正的提交做好准备时,我只是:
git reset --soft HEAD~; git reset
现在我可以小心地控制最终提交的内容。
答案 1 :(得分:5)
他们没有出现在主分支中 - 如果你进行了硬重置和干净,它们就会消失。当你切换分支时,Git只是保留你的本地修改。
这通常很有用;您可能已经意识到要将这些修改提交到与您当前所在分支不同的分支。如果修改与两个分支之间的差异冲突,git将拒绝切换分支。
你对最好的方法是正确的 - 根据我的经验,干净地转换分支是git stash
最常见的用途之一。
答案 2 :(得分:3)
听起来你用git branch profiles
创建了分支,但没有切换到它,所以你留在master
,并在你提交时得到了文件更改。
创建分支后,您需要使用git checkout
明确切换到它(只需动态创建新分支,然后使用git checkout -b
一步切换到它。)
如果您有更改,您不想丢失(或提交到当前分支),而是放入其他分支,请执行以下操作:
git add -A
git stash
git checkout <other branch>
git stash pop
git stash
created_at
的更多信息