赞
踩
# 丢弃工作区的修改(不包括对文件自身的操作,如添加文件、删除文件)
git restore <file_name>
# 将暂存区的修改重新放回工作区(包括对文件自身的操作,如添加文件、删除文件)
git restore --staged <file_name>
# 撤销最新的 commit,将其改动放回到 工作区
git reset HEAD~ # 或 git reset --mixed HEAD~ 都是同一个意思
# 撤销最新的 commit,将其改动放回到 暂存区
git reset --soft HEAD~
# 丢弃当前工作区和暂存区所有的改动
git reset --hard HEAD
# 丢弃工作区的修改(不包括对文件自身的操作,如添加文件、删除文件)
git restore <file_name>
# 将暂存区的修改重新放回工作区(包括对文件自身的操作,如添加文件、删除文件)
git restore --staged <file_name>
# 将该 commit-id 后面所有 commit 丢弃,那丢弃的 commit 中的改动内容是否会消失? # --mixed 模式: 也就是默认模式,会将所有丢失 commit 的文件改动等放到【工作区】 # --soft 模式: 也就是默认模式,会将所有丢失 commit 的文件改动等放到【暂存区】 # --hard 模式: 也就是默认模式,会将所有丢失 commit 的文件改动【丢弃】 # 所以,再执行 reset 前,最好将工作区和暂存区清空,否则可能有未注意到的合并,从而产生bug # 比如若有当前工作区有 a 文件改动,撤销的 commit 中也有 a 文件的改动, git reset 执行后,工作区的 a 文件是以哪种改动为主? # 经测试 a 文件的改动 = 当前工作区的 a 文件改动 != 撤销commit中a文件的改动 # 所以,即使无法清空工作区和暂存区,最好也要保证 工作区和撤销的commit中 没有相同文件的改动 # 另外执行 hard 模式要慎重,会造成文件的丢失 # 若不慎造成 commit 丢失,可以通过 reflog 进行恢复,但是无法恢复【工作区】和【暂存区】的文件丢失 git reset commit-id # 默认 --mixed 模式 # 将该 commit-id 后面所有 commit 撤销 git reset commit-id # 默认 --mixed 模式 # 将最新的 commit 撤销 git reset HEAD~ # 或 git reset HEAD^ # 将最新的和次新的 commit 撤销 git reset HEAD~2 # 或 git reset HEAD^^
# git revert 不会改变历史 commit,而是提交一个新 commit,执行指定 commit 中改动的反向操作
# 如 commit-A 中的改动是,新增 a.txt 文件, git revert commit-A 执行后,会新增一个 commit,该 commit 的改动就是 删除 a.txt
git revert commit-id
git clean
用于清除没有加入到git版本库的文件和目录,如果加入到git版本库里的话,我们就无法使用git clean 清除
,必须还原到未跟踪(Untracked)状态才可以进行git clean
清除,在我们进行git管理项目代码的时候,经常会遇到以下场景。
这个时候,通过使用git clean
命令来处理,就会非常容易。
# 小结 git clean在开发中应该充分应用。因此请牢记以下几个组合参数: -n,显示哪些文件会被删除,如果文件是.gitignore里标记的文件,则忽略。 -d,查找目录。 -f,删除文件。 -x,查找未跟踪(Untracked)所有文件 -X,仅查找.gitignore里标记的未跟踪(Untracked)文件 查看删除列表 git clean -n组合 删除列表git clean -f组合 # 1. 查看哪些文件会被删除 # 可以查看哪些未跟踪文件将会被删除,同时这些文件没有在.gitignore文件里进行标记。 git clean -n # 查看将会被删除的所有未跟踪文件 git clean -nx # 只展示那些在.gitignore里标记的文件中,哪些是将要被删除的未跟踪文件。 git clean -nX # 可以查看哪些文件和目录将会被删除,同时这些文件和目录没有在.gitignore文件里进行标记 git clean -nd # 查看将会被删除的所有未跟踪的文件和目录 git clean -nx # 只展示那些在.gitignore里标记的文件和目录中,哪些是将要被删除的未跟踪文件和目录。 git clean -nX # 其中,.gitignore中,如果忽略的文件目录结构是dir/*时,git clean -ndX,只删除忽略目录下的所有文件;如果忽略的文件目录结构是dir/时,git clean -ndX,删除忽略的目录 # 2. 执行删除操作 # 删除.gitignore里未标记的文件 git clean -f # 删除所有未跟踪的文件 git clean -fx # 只删除.gitignore里标记的文件 git clean -fX # 删除.gitignore里未标记文件和目录 git clean -fd # 删除所有未跟踪的的文件和目录 git clean -fdX # 删除.gitignore里标记的文件和目录 git clean -fdX
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。