如何列出在Git中当前分支中所做的所有未提交更改?

6

我是一个git的新手,最开始只在主分支上工作。后来我了解了一些关于git分支的知识,被它的强大功能所吸引,因此开始在我的工作流程中使用分支。

当我开始使用分支时,我的主分支没有任何可提交的内容。然后我创建了一个新的分支feature1

git checkout -b feature1

我在分支feature1中进行了更改,并添加了一些js和css文件。然后我从主分支创建了另一个分支,但没有提交对分支feature1所做的更改,就像这样:

git checkout master
git checkout -b feature2

我在feature2分支中添加了一些代码和一些新的 CSS 文件,然后又从主分支创建了另一个分支feature3,并在feature2分支中进行了更改,提交如下:

git checkout master
git checkout -b feature 3

我在 feature3 分支中添加了一些新的代码和 1 个新的 CSS 文件。现在当我执行以下操作时:

git status

我得到了所有在三个分支中修改但未提交的文件列表。我原本期望只会得到当前分支feature3中修改的文件列表,现在我不记得我在哪个分支中创建了哪些文件。

请问有谁能帮我列出我在特定分支中创建或修改的文件,并将它们提交到相应的分支中?

例如:

列出所有在feature1分支中修改或创建的文件,并将它们提交到feature1分支中,对所有三个分支都这样做。

我还想知道如何从主分支创建一个新分支,而不获取其他分支中已修改但未提交的文件。也就是说,我希望新分支是主分支的精确克隆,没有需要提交的内容。

3个回答

8
只需启动 gitk --all 命令,您就可以检查所有分支、更改等内容。选择一个点,右键单击另一个点,在菜单顶部您将获得两个版本的差异比较结果。
在 git 中,分支只是对提交记录的“标签”。如果您在主分支上创建一个分支,则它与完美的“克隆”一样。然而,实际上它只是包含相同哈希的41字节文件。
我认为您应该熟悉一下这些概念,从您的描述中我无法推断出您具体做了什么及想要达到的目的。

我有一个干净的主分支(master branch),然后我创建了一个新的分支f1,并添加了一些代码,但是我没有提交(f1)上的新更改,因为我不想弄乱提交历史。接着,我从主分支再创建了一个f2分支,在这里我也添加了新代码,但是没有提交它们。然后我又创建了一个新的分支f3,并向f3中添加了一些新代码,所以我想要提交对f3所做的更改,于是我检查了git状态,现在这里列出了我已经修改了的所有文件(f1、f2、f3),所以现在我想知道哪些是我只在f3分支中创建的文件,以便我可以将它们提交。那么如何列出我在f3分支或其他分支中添加的文件? - user2373881
1
这听起来不太好。您创建的“新”分支实际上都是等效的,并指向同一位置。而且,您所有的本地更改都在一起,没有任何关于您意图的信息。经验法则:在进行任何操作之前,特别是更改分支之前,请提交(或存储)。如果您不推送,“混乱”不是问题,因为它都是本地的,如果您不喜欢它,可以以多种方式重新做。 - Balog Pal
1
好的,学到了很棒的课程。在创建新分支之前提交更改是非常有帮助的。 - user2373881

5
如果您没有提交文件,那么就无法确定它是在哪个分支上创建的。

5

如 @abeaumet 所述,如果您创建了文件但未提交它们,则在更改分支时无法跟踪它们。

这是因为它们位于您的工作树中而不是您的git存储库中。您的工作树实际上是您的存储库的已检出版本,再加上您当前正在进行的任何更改。移动分支不会删除这些未跟踪的文件,git将它们留在您的工作树中,以便它们不会被删除。

阅读此问题中链接的一些文章,以了解您的存储库和工作树之间的区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接