根据以前的操作,目前我们的master分支上有三个文件:initial-commit.txt, second-commit.txt, working-with-branches.txt
在开始之前,先明白一些概念,当我们在项目中进行修改时,我们称文件所在的区域为工作区,当我们使用add命令后,文件所在的区域叫暂存区,最后执行commit之后,文件就被放到了版本库中。
git restore: 撤销工作区的修改
git restore也是一个新命令,后面可以接文件名来撤销指定文件的修改,也可以接一个点撤销所有的修改。
git checkout 的又一迷惑用法
在没有git restore命令之前,我们使用git checkout来撤销未追踪文件的修改,用法和git restore一致。
git clean: 删除工作区的文件
// 列出所有未追踪的新增文件
git clean -dn
// 强制删除所有未追踪的新增文件
git clean -df
git reset:撤销暂存区的修改
git reset的操作其实就是将所在分支最新一次提交的记录覆盖当前暂存区的内容,所以暂存区的改变就没有了,这个改变将成为未追踪的文件修改。
git reset initial-commit.txt
// 等价于下面的命令
git restore --staged initial-commit.txt
git rm:删除暂存区的文件
// 删除暂存区中的文件:`working-with-branches.txt`
git rm working-with-branches.txt
// 查看暂存区中的全部文件,我们将只能看见`initial-commit.txt`和`second-commit.txt`
git ls-files
// 提交这次删除
git commit -m 'deleted working-with-branches file'
git reset HEAD~n: 撤销版本库的提交
让我们新增一个文件unrequired.txt,并添加内容,add之后commit,这时我们的提交中就新增了一条记录:
现在我们觉得这个文件是不需要的,并且不想在提交记录中显示它,那我们需要撤销最近的一次提交记录,让记录退回到上一次的提交。
// HEAD~1:将HEAD的指向往后退一步,所以撤销了一次提交,如果你想多撤销几次提交,将n改成多少即可
// 默认情况下,这个操作会在版本库和暂存区中撤销提交记录,但在工作区中仍保留修改
git reset HEAD~1
// --soft,会在版本库中撤销提交记录,但在暂存区中仍保留修改
git reset --soft HEAD~1
// --hard,这个操作会在版本库和暂存区中撤销提交记录,且不保留在工作区中的修改
git reset --hard HEAD~1
删除分支
// -d 可以删除已经merge的分支, -D 会强制删除,不管有没有被merge
git branch -D second-branch third-branch