执行git reset --mixed <commit id =“”>后,git status如何检测更改?

时间:2018-07-14 12:26:04

标签: git

我正在努力尝试了解git reset的工作原理。我已经阅读了各种文章,并与我的演示仓库一起玩-我仍然不知道那里到底发生了什么。当我执行git reset --hard时,结果对我来说很直观(“一切”都回到指定的提交方式),但是当我执行默认的git reset --mixed时,这就是我困惑的地方

resetting-checking-out-and-reverting这就是本文所说的git reset --mixed:

  

已更新暂存快照以匹配指定的提交,但是工作目录不受影响。这是默认选项。

我的理解是,这意味着git status将检测到没有更改,因为暂存的快照现在“已更新以匹配指定的提交...”。

令我惊讶的是,git状态实际上显示了未分段的更改,与git reset --mixed之前的最后一次提交相对应。

我认为我在这里完全错了,如果有人用简单的话向我解释这个问题,我将不胜感激,因为阅读所有这些文章和文章并不能解决问题:D

2 个答案:

答案 0 :(得分:2)

root没有提交ID只会取消转储您已转储的所有内容(如果有的话)。 git reset --mixed删除所有提交直到指定的提交,但所有这些更改都保留在工作目录中。结果,它们被视为未暂存(甚至可能未跟踪)的更改。

答案 1 :(得分:1)

Diagram of working directory, directory, staging area and git repository

比方说,您有一个包含两个commits commitA,然后是commitB的仓库,您当前正在使用commitA。

如果您这样做:

@Bean public FlatFileItemReader <List<T>> reader() throws Exception {
    //reader.read()
    }

 @Bean
    public ItemProcessor <List<T>, V> getTargetValueProcessor() {
        return new ItemProcessor <List<T>, V>() {
            @Override
            public V process(List<T> t) throws Exception {
                //processing logic
            }
        };   }

您将返回到commitA状态,这意味着您将丢失所做的更改。

但是,如果您这样做

let text = "Hi" // text to be drawn

let uiText = NSAttributedString(string: text)  //converting into NSAttributedString

let point = CGPoint(x: button.bounds.midX, y: button.bounds.midY)  //where to draw

uiText.draw(at:point) // drawing hello in that point
button.backgroundColor = UIColor.red

您的工作目录将不会被清除,更改不会丢失,只会被取消登台且未被提交。

最后一个选择:

git reset --hard commitA

将“取消提交您的更改”,这意味着它们将在您的暂存区中。


为清晰起见,有些复制,git reset commitA # same as --mixed 显示:

git reset --soft commitA

我的目录中有两个文件git logcommit 03c71ae050d1fff5d6eede18d6a3a8861076ba6a Added bar commit 39e0af4635f550b56cb6f887de43d28874d55b72 Added foo

foo

将使我回到第一次提交并完全删除bar文件。

git reset --hard 03c71ae050d1fff5d6eede18d6a3a8861076ba6a

会将bar标记为未跟踪

git reset 03c71ae050d1fff5d6eede18d6a3a8861076ba6a

将标记bar在要提交的更改中。