git 新手,为什么我会在开发分支上看到我的更改,即使我在功能分支上进行了更改?

eff*_*ffe 2 git git-flow atlassian-sourcetree

我是 git 新手。

我遵循 git-flow 分支模型,所以我有分支 master 和 develop ,每次我需要一个新功能时,我都会打开一个新的功能分支。

我对功能分支中的几个文件进行了一些更改,并暂存了它们,但尚未提交,因为这些更改尚未经过测试:

$ git status
On branch feature/ParamConfigFaultCollection
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   IOLSE_User_Objs.h
        modified:   data.c
Run Code Online (Sandbox Code Playgroud)

现在我需要在分支开发上工作,所以我切换到它,我使用 Sourcetree 作为 git GUI 并双击开发: 在此处输入图片说明

并且我希望开发人员看不到功能分支上隐藏文件中的更改,但似乎这些更改也存在于开发中:

$ git status
On branch develop
Your branch is up to date with 'origin/develop'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   IOLSE_User_Objs.h
        modified:   data.c
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

jes*_*ing 7

您已暂存的更改不会被隐藏。他们为提交做好了准备。在分支之间切换时,任何未提交或未存储的更改将保留在您的工作区域中,并且当 Git 可以在不覆盖更改的文件的情况下执行到另一个分支的切换时,它将允许您这样做。

如果您不想随身携带更改,则必须:

  • 最佳选择:首先将它们提交到您的功能分支以清理您的工作区
  • 不错的选择,但有一些缺点:将它们藏起来并清洁您的工作区域
  • 最坏的情况:创建一个新的临时分支,在那里提交您的更改,然后再重新挑选它们。

然后切换到另一个分支。

一些客户会让您代表您进行存储。我不想这样做,因为当我切换回来时很容易忘记隐藏的更改。

我要做的不是隐藏,而是在功能分支上提交我的更改,最好使用非常明确的提交消息来解释这些还没有准备好,然后,当我回到该分支时,我可以:

  • 在推送之前修改提交以向其添加其他更改
  • 对更改进行交互式 rebase 以及其他更改,以在推送之前清理本地历史记录
  • 执行 agit reset --soft HEAD~1以撤消临时提交,但保留其更改,然后对其进行更多工作并稍后在新提交中再次提交。

只要您不将更改推送到远程服务器,您就可以调整本地历史记录,直到它看起来像您想要的样子。