本文主要記錄了git中,錯誤的撤銷和文件的刪除。
撤銷修改
-
這里有3中情況
- 改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
- 不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了1,第二步,按照1操作。
- 已經提交了不合適的修改到版本庫時,想要撤銷本次提交,可以版本回退,不過前提是沒有推送到遠程庫。
//第一種撤銷:工作區撤銷 ubuntu@myubuntu:~/joe/learngit$ vi readme.txt //工作區的錯誤還沒有add到暫存區 ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 尚未暫存以備提交的變更: (使用 "git add <file>..." 更新要提交的內容) (使用 "git checkout -- <file>..."
丟棄工作區的改動) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") ubuntu@myubuntu:~/joe/learngit$git checkout --
readme.txt ubuntu@myubuntu:~/joe/learngit$ vi readme.txt //第二種撤銷:暫存區撤銷 ubuntu@myubuntu:~/joe/learngit$ vi readme.txt ubuntu@myubuntu:~/joe/learngit$ git add readme.txt //錯誤的文件已經提交到暫存區了 ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 要提交的變更: (使用 "git reset HEAD <file>..."
撤出暫存區) 修改: readme.txt ubuntu@myubuntu:~/joe/learngit$ git reset HEAD readme.txt 重置后撤出暫存區的變更: M readme.txt ubuntu@myubuntu:~/joe/learngit$ vi readme.txt ubuntu@myubuntu:~/joe/learngit$ git status //撤出暫存區后,還需使用checkout丟棄工作區的改動 位於分支 master 尚未暫存以備提交的變更: (使用 "git add <file>..." 更新要提交的內容) (使用 "git checkout -- <file>..." 丟棄工作區的改動) 修改: readme.txt 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") ubuntu@myubuntu:~/joe/learngit$git checkout --
readme.txt ubuntu@myubuntu:~/joe/learngit$ vi readme.txt //第三種已經提交,使用版本回退(學習筆記2)
文件的刪除
- 使用rm刪除文件,然后git add filename添加到暫存區,git commit 提交。
- 直接使用git rm filename ,不用git add直接git commit即可。
//第一種方法git rm file ubuntu@myubuntu:~/joe/learngit$ ls abc.c readme.txt ubuntu@myubuntu:~/joe/learngit$git rm
abc.c rm 'abc.c' ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 要提交的變更: (使用 "git reset HEAD <file>..." 撤出暫存區) 刪除: abc.c ubuntu@myubuntu:~/joe/learngit$git commit -m "del abc"
[master 020f927] del abc 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 abc.c ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 無文件要提交,干凈的工作區 ubuntu@myubuntu:~/joe/learngit$ ls readme.txt //第二種方法rm file ubuntu@myubuntu:~/joe/learngit$ ls ab.c readme.txt ubuntu@myubuntu:~/joe/learngit$ rm ab.c ubuntu@myubuntu:~/joe/learngit$ ls readme.txt ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 尚未暫存以備提交的變更: (使用 "git add/rm <file>..." 更新要提交的內容) (使用 "git checkout -- <file>..." 丟棄工作區的改動) 刪除: ab.c 修改尚未加入提交(使用 "git add" 和/或 "git commit -a") ubuntu@myubuntu:~/joe/learngit$ git add ab.c ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 要提交的變更: (使用 "git reset HEAD <file>..." 撤出暫存區) 刪除: ab.c ubuntu@myubuntu:~/joe/learngit$git commit -m "del ab.c"
[master 0ad1dfe] del ab.c 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ab.c ubuntu@myubuntu:~/joe/learngit$ git status 位於分支 master 無文件要提交,干凈的工作區