git提交回退和未提交文件处理

git add 将文件及其修改添加到 Git 索引和追踪当中,也就是将文件快照放入暂存区当中,但我们有时候想要丢弃本次修改过并添加到暂存区的内容,或者需要删除未被追踪的文件。

git checkout
git checkout 是把文件从暂存区中恢复到工作区,也就是说源文件如果被修改,再使用 git add 添加到暂存区了,git checkout 无法把他再恢复到源文件,只能恢复到暂存时的状态。

git reset
git reset 可以用来重置工作区和暂存区还能更改 HEAD 指向,可以达到我们的丢弃本次修改到暂存区的目的。

# Usage: git reset [<mode>] [<commit>]
# eg: git reset –mixed HEAD
$ git reset HEAD
$ git checkout .
首先使用 git reset HEAD 把暂存区重置到本次提交,再用 checkout 恢复文件到暂存区的状态,但我们暂存区已经重置了,所以实际 checkout 恢复到的是本次提交时的初始状态了。

git reset 有五种模式,不写明模式参数时,默认为 –mixed,几种模式间主要的差异在于重置的区域不同,这里总结下其异同:(表中不写的位置代表无操作)

重置工作区 重置暂存区 将 HEAD 指向指定 commit
–hard
–soft
–mixed
–merge 暂存区有文件则重置失败
–keep 暂存区有文件则重置失败
所以刚才上面两行命令, reset 后再 checkou ,可以用 –hard 代替:

1
git reset –hard HEAD
git clean
顺便一提,git reset –hard 是直接重置整个工作区,所以也会把未被添加追踪的新文件也删除了;但 git checkout 是恢复,所以不会影响未添加追踪的新文件。

git clean 就是用来删除未被添加追踪的文件和文件夹的。

git clean -n  # 将显示哪些未被追踪的文件和文件夹可以清理
git clean -d  # 清理未被追踪的文件夹
git clean -f  # 清理未被追踪的文件
git clean -df  # 清理未被追踪的文件和文件夹

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:git提交回退和未提交文件处理

本文链接地址:https://www.iaccepted.net/stone/235.html

相关文章