我正在努力尝试了解git reset的工作原理。我已经阅读了各种文章,并与我的演示仓库一起玩-我仍然不知道那里到底发生了什么。当我执行git reset --hard时,结果对我来说很直观(“一切”都回到指定的提交方式),但是当我执行默认的git reset --mixed时,这就是我困惑的地方
resetting-checking-out-and-reverting这就是本文所说的git reset --mixed:
已更新暂存快照以匹配指定的提交,但是工作目录不受影响。这是默认选项。
我的理解是,这意味着git status将检测到没有更改,因为暂存的快照现在“已更新以匹配指定的提交...”。
令我惊讶的是,git状态实际上显示了未分段的更改,与git reset --mixed之前的最后一次提交相对应。
我认为我在这里完全错了,如果有人用简单的话向我解释这个问题,我将不胜感激,因为阅读所有这些文章和文章并不能解决问题:D
答案 0 :(得分:2)
root
没有提交ID只会取消转储您已转储的所有内容(如果有的话)。 git reset --mixed
删除所有提交直到指定的提交,但所有这些更改都保留在工作目录中。结果,它们被视为未暂存(甚至可能未跟踪)的更改。
答案 1 :(得分:1)
比方说,您有一个包含两个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 log
和commit 03c71ae050d1fff5d6eede18d6a3a8861076ba6a
Added bar
commit 39e0af4635f550b56cb6f887de43d28874d55b72
Added foo
foo
将使我回到第一次提交并完全删除bar
文件。
git reset --hard 03c71ae050d1fff5d6eede18d6a3a8861076ba6a
会将bar
标记为未跟踪
git reset 03c71ae050d1fff5d6eede18d6a3a8861076ba6a
将标记bar
在要提交的更改中。