<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hant-TW">
	<id>https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_2.4_%E6%92%A4%E9%8A%B7%E6%93%8D%E4%BD%9C_%28Undo%29</id>
	<title>Pro Git 2.4 撤銷操作 (Undo) - 修訂歷史</title>
	<link rel="self" type="application/atom+xml" href="https://jiva.dila.edu.tw/index.php?action=history&amp;feed=atom&amp;title=Pro_Git_2.4_%E6%92%A4%E9%8A%B7%E6%93%8D%E4%BD%9C_%28Undo%29"/>
	<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_2.4_%E6%92%A4%E9%8A%B7%E6%93%8D%E4%BD%9C_(Undo)&amp;action=history"/>
	<updated>2026-05-05T15:32:57Z</updated>
	<subtitle>本 Wiki 上此頁面的修訂歷史</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://jiva.dila.edu.tw/index.php?title=Pro_Git_2.4_%E6%92%A4%E9%8A%B7%E6%93%8D%E4%BD%9C_(Undo)&amp;diff=526&amp;oldid=prev</id>
		<title>imported&gt;Ray：​新頁面: 任何時候，你都有可能需要撤銷剛才所做的某些操作。接下來，我們會介紹一些基本的撤銷操作相關的命令。請注意，有些操作並不總是可以...</title>
		<link rel="alternate" type="text/html" href="https://jiva.dila.edu.tw/index.php?title=Pro_Git_2.4_%E6%92%A4%E9%8A%B7%E6%93%8D%E4%BD%9C_(Undo)&amp;diff=526&amp;oldid=prev"/>
		<updated>2011-05-24T07:43:43Z</updated>

		<summary type="html">&lt;p&gt;新頁面: 任何時候，你都有可能需要撤銷剛才所做的某些操作。接下來，我們會介紹一些基本的撤銷操作相關的命令。請注意，有些操作並不總是可以...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新頁面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;任何時候，你都有可能需要撤銷剛才所做的某些操作。接下來，我們會介紹一些基本的撤銷操作相關的命令。請注意，有些操作並不總是可以撤銷的，所以請務必謹慎小心，一旦失誤，就有可能丟失部分工作成果。&lt;br /&gt;
&lt;br /&gt;
=修改最後一次提交=&lt;br /&gt;
&lt;br /&gt;
有時候我們提交完了才發現漏掉了幾個檔沒有加，或者提交資訊寫錯了。想要撤銷剛才的提交操作，可以使用 --amend 選項重新提交：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git commit --amend&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
此命令將使用當前的暫存區域(staging area)執行提交。如果剛才提交完沒有作任何改動，直接執行此命令的話，相當於有機會重新編輯提交說明，而所提交的文件快照和之前的一樣。&lt;br /&gt;
&lt;br /&gt;
啟動文字編輯器後，會看到上次提交時的說明，編輯它確認沒問題後保存退出，就會使用新的提交說明覆蓋剛才失誤的提交。&lt;br /&gt;
&lt;br /&gt;
如果剛才提交時忘了暫存某些修改，可以先補上暫存操作，然後再運行 --amend 提交：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git commit -m 'initial commit'&lt;br /&gt;
$ git add forgotten_file&lt;br /&gt;
$ git commit --amend &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
上面的三條命令最終得到一個提交，第二個提交命令修正了第一個的提交內容。&lt;br /&gt;
&lt;br /&gt;
=取消已經暫存的檔 (Unstaging a Staged File)=&lt;br /&gt;
&lt;br /&gt;
接下來的兩個小節將示範如何取消暫存區域中的檔，以及如何取消工作目錄中已修改的檔。&amp;lt;br&amp;gt;&lt;br /&gt;
不用擔心，查看檔案狀態的時候就提示了該如何撤銷，所以不需要死記硬背。&amp;lt;br&amp;gt;&lt;br /&gt;
來看下面的例子，有兩個修改過的檔，我們想要分開提交，但不小心用 git add * 全加到了暫存區域。該如何撤銷暫存其中的一個檔呢？git status 命令的輸出會告訴你怎麼做：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git add .&lt;br /&gt;
$ git status&lt;br /&gt;
# On branch master&lt;br /&gt;
# Changes to be committed:&lt;br /&gt;
#   (use &amp;quot;git reset HEAD &amp;lt;file&amp;gt;...&amp;quot; to unstage)&lt;br /&gt;
#&lt;br /&gt;
#       modified:   README.txt&lt;br /&gt;
#       modified:   benchmarks.rb&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
就在 “Changes to be committed” 下面，括弧中有提示，可以使用 git reset HEAD &amp;lt;file&amp;gt;... 的方式取消暫存。好吧，我們來試試取消暫存 benchmarks.rb 文件：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git reset HEAD benchmarks.rb &lt;br /&gt;
benchmarks.rb: locally modified&lt;br /&gt;
$ git status&lt;br /&gt;
# On branch master&lt;br /&gt;
# Changes to be committed:&lt;br /&gt;
#   (use &amp;quot;git reset HEAD &amp;lt;file&amp;gt;...&amp;quot; to unstage)&lt;br /&gt;
#&lt;br /&gt;
#       modified:   README.txt&lt;br /&gt;
#&lt;br /&gt;
# Changed but not updated:&lt;br /&gt;
#   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
#   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
#&lt;br /&gt;
#       modified:   benchmarks.rb&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
這條命令看起來有些古怪，先別管，能用就行。現在 benchmarks.rb 檔又回到了之前已修改未暫存的狀態。&lt;br /&gt;
&lt;br /&gt;
=取消對檔案的修改 (Unmodifying a Modified File)=&lt;br /&gt;
&lt;br /&gt;
如果覺得剛才對 benchmarks.rb 的修改完全沒有必要，該如何取消修改，回到之前的狀態（也就是修改之前的版本）呢？git status 同樣提示了具體的撤銷方法，接著上面的例子，現在未暫存區域看起來像這樣：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
# Changed but not updated:&lt;br /&gt;
#   (use &amp;quot;git add &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
#   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
#&lt;br /&gt;
#       modified:   benchmarks.rb&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
在第二個括弧中，我們看到了拋棄檔修改的命令（至少在 Git 1.6.1 以及更高版本中會這樣提示，如果你還在用老版本，我們強烈建議你升級，以獲取最佳的用戶體驗），讓我們試試看：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;XML&amp;quot;&amp;gt;&lt;br /&gt;
$ git checkout -- benchmarks.rb&lt;br /&gt;
$ git status&lt;br /&gt;
# On branch master&lt;br /&gt;
# Changes to be committed:&lt;br /&gt;
#   (use &amp;quot;git reset HEAD &amp;lt;file&amp;gt;...&amp;quot; to unstage)&lt;br /&gt;
#&lt;br /&gt;
#       modified:   README.txt&lt;br /&gt;
#&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
可以看到，該檔已經恢復到修改前的版本。你可能已經意識到了，這條命令有些危險，所有對檔的修改都沒有了，因為我們剛剛把之前版本的檔複製過來重寫了此檔。所以在用這條命令前，請務必確定真的不再需要保留剛才的修改。如果只是想回退版本，同時保留剛才的修改以便將來繼續工作，可以用下章介紹的 stashing 和分支來處理，應該會更好些。&lt;br /&gt;
&lt;br /&gt;
記住，任何已經提交到 Git 的都可以被恢復。即便在已經刪除的分支中的提交，或者用 --amend 重新改寫的提交，都可以被恢復（關於資料恢復的內容見第九章）。所以，你可能失去的資料，僅限於沒有提交過的，對 Git 來說它們就像從未存在過一樣。&lt;/div&gt;</summary>
		<author><name>imported&gt;Ray</name></author>
	</entry>
</feed>