Git中分支之间的未跟踪文件

Cla*_*nce 31 git branch

我一直在这里寻找答案,似乎我可能只是对git分支应该如何工作做出错误的假设.

我有我的master分支,我已经创建了一个功能分支profiles,我正在为配置文件做一些特定的工作.在处理配置文件时,我更改了5或6个文件,并添加了另外5或6个新文件.我需要切换回master分支来修复快速错误,并注意到所有新文件和修改过的文件.我想这是有道理的,因为git不会从master分支中删除未跟踪的文件并将它们带回我的profiles分支,因为它们实际上是未跟踪的.但是对现有文件的更改又如何呢?它们为什么出现在主分支中.

这是什么最好的做法.我还没准备好在本地提交更改.我应该只是隐藏所有这些更改,切换到master,进行小修复,切换回profiles然后重新应用存储?

任何帮助表示赞赏.谢谢

Ran*_*rtz 36

"我还没准备好在本地提交更改."

git中的提交是本地的东西,可以撤消,重做和重新重做.只有当您将提交推送到需要注意的地方时才会这样.

此外,提交对于本地工具是可见的gitk,并且可以对它们进行差异处理,并且可以重新定位到其他提交等.这是一个非常强大的工具.学会使用它.

我经常这样做:

git add .; git commit -a -m 'WIP'
Run Code Online (Sandbox Code Playgroud)

如果我认为我可能会被打断,只是为了隐藏当前工作树中的所有内容.如果我做了一些更改,我使用:

git add .; git commit --amend
Run Code Online (Sandbox Code Playgroud)

就地更新我的"WIP"提交.当我终于为真正的提交做好准备时,我只是:

git reset --soft HEAD~; git reset
Run Code Online (Sandbox Code Playgroud)

现在我可以小心地控制最终提交的内容.

  • 只是为了澄清,`git reset --soft HEAD~之间是否存在任何预期的区别; git reset`和`git reset HEAD ^`?据我所知,他们都将HEAD和索引重置为"WIP"提交的父级,准备使用部分或全部工作树更改进行实际提交,但我可能错过了一个微妙之处. (2认同)
  • @Charles Bailey:" - 软件根本不会触及索引文件,也不会触及工作树,但要求它们处于良好状态.这会使所有已更改的文件"保持更改",因为git status会将其设置为".如果您使用"git reset HEAD ^",您将无法获得此致命错误:无法在合并过程中执行软重置. (2认同)
  • 当我写下这个答案时,“藏匿处”是一个相对较新的东西。但是我现在完全接受使用“ git stash…”来保存和恢复正在进行的工作,甚至以编程方式进行。例如,“ git stash;仅git pull --ff-only; git stash pop --index”几乎不需要干预即可完成,但它使我了解最新的上游信息。 (2认同)

Cas*_*bel 5

它们没有出现在主分支中 - 如果你进行了硬重置和干净,它们就会消失.当你切换分支时,Git只是保留你的本地修改.

这通常很有用; 您可能已经意识到要将这些修改提交到与您当前所在分支不同的分支.如果修改与两个分支之间的差异冲突,git将拒绝切换分支.

不过你对最好的方法是正确的 - 根据我的经验,干净地转换分支是最常见的用途之一git stash.


Ran*_*all 5

听起来您使用 创建了分支git branch profiles,但没有切换到它,所以您留在了master,并且在您提交时它得到了文件更改。

创建分支后,您需要使用 显式切换到该分支git checkout(或者您可以即时创建新分支并使用 一步切换到该分支git checkout -b)。

如果您不想丢失更改(或提交到当前分支),而是将其放入另一个分支,请执行以下操作:

git add -A
git stash
git checkout <other branch>
git stash pop
Run Code Online (Sandbox Code Playgroud)

有关更多信息git stash,请访问git-scm.com