我的臨時區域發生了變化,還有一些還沒有暫存(某些文件在暫存區域內外都有變化)。 我想反轉暫存區域的內容以及未暫存的更改。爲了做到這一點,是否存在一個快捷方式,而不需要執行更復雜的操作,如本地側枝提交,差異或存儲[等]?謝謝。Git反轉臨時區域
回答
這是我用來解決這個問題。
第一個git reset
它將刪除所有文件從'staging'到''文件沒有提交'提交'。這是兩個「分期」和文件「沒有上演提交的文件」,則會保留最近當前在更改「文件沒有上演犯」
然後
git add /path/to/file
你所需要的特定文件要添加到分期
不完全是一條捷徑,但它能夠完成
反向地工作,你git reset
後,你可以git checkout /path/to/file
對於目前「沒有上演承諾」你不要的文件」你想添加到分期。這將從「不上演犯」
然後運行git add .
這將增加在「未上演承諾」到「升級」的所有文件刪除特定的文件 - 無論是你的情況更容易
很可能有不止一個辦法做到這一點,但我想我會採取這種方式 - 我們目前無法預建的快捷方式,但你可以很容易地編寫自己的腳本來遵循這個過程:
生成爲您目前正在使用的東西打補丁rking目錄,但不是在你的指數,但(東西你沒有爲做
git add
)git diff-files -p > /tmp/unstaged.patch
生成了你已經添加到索引與目前
HEAD
git diff-index --cached -p HEAD > /tmp/staged.patch
- 補丁
重置您的索引和工作目錄到你
HEAD
git reset --hard HEAD
一pply你不分階段的補丁都工作目錄和索引,導致這些變化正在上演
git apply --index /tmp/unstaged.patch
應用您上演補丁只針對你的工作目錄
git apply /tmp/staged.patch
根據具體更改的性質,步驟4和/或5可能會導致您需要手動解決的一些合併衝突,但我不確定是否有完全避免這種可能性的乾淨方法。
你也許可以使用git stash
完成步驟1和4,而不是上面的命令,但我不知道,真的會得到你任何東西
此外,您還可以查看該手冊頁git diff-*
和git apply
首先查看是否有其他選項可能對您有用。
這裏是我如何做到這一點:
- 提交索引到一個臨時提交
- 提交,其餘爲二次臨時提交
- 開關的提交的順序與互動變基
- 混合復位
- 軟復位
它可以被輸入了手動蠻快的,特別是如果你使用Vim的提交信息:
git commit -m tmp1
git add . # optionally with `git add -u` if there are deletions
git commit -m tmp2
git rebase -i HEAD~2 # swap the order of the commits; `ddp:wq` in vi
git reset HEAD~1
git reset HEAD~1 --soft
我喜歡這個,除了手動編輯交換提交。 http://stackoverflow.com/questions/16203562/programmatically-swap-last-two-commits –
好點。但對我個人而言,這個問題並不足以寫出一個快捷方式腳本,並記住它的名稱和工作原理。互動式重新裝訂我幾乎每天都會這樣做,它對我來說非常直觀和高效。 – gtd
基於GTD的答案和腳本的能力反轉提交,這是我現在使用什麼:
[alias]
swaplast = !git tag _invert && git reset --hard HEAD~2 && git cherry-pick _invert _invert~1 && git tag -d _invert
invertindex = !git commit -m tmp1 && git add -A && git commit -m tmp2 && git swaplast && git reset HEAD~1 && git reset HEAD~1 --soft
發佈在我的博客在這裏:http://blog.ericwoodruff.me/2013/12/inverting-git-index.html
- 1. git的臨時區域
- 2. GIT - 編譯和測試臨時區域
- 3. 「git commit --amend」without「git add」/正在更改臨時區域
- 4. 工作目錄乾淨時,git臨時區域包含什麼?
- 5. IntelliJ IDEA git集成和臨時區域(索引)
- 6. 「git commit files」是否將文件放入臨時區域?
- 7. Git合併影響工作目錄和臨時區域
- 8. 使用PowerShell檢查Git臨時區域中的xml文件
- 9. 如何在git中將提交移動到臨時區域?
- 10. git add將文件添加到臨時區域
- 11. 臨時區域的推動變化
- 12. 實現Qt臨界區域
- 13. Git臨時提交
- 14. git:自動添加目錄中更新的任何文件到臨時區域
- 15. 如何下載git中的臨時區域中存在的差異
- 16. 繪圖反轉時HighCharts範圍區域繪圖不起作用
- 17. 反轉色區域的反色結果int
- 18. HTACCESS將流量從臨時域轉發到新域
- 19. git的臨時服務器
- 20. 用臨時緩衝區使用ofstream寫入臨時緩衝區
- 21. 如何反轉`git submodule init`
- 22. 反轉一個git獲取
- 23. 如何反轉git rebase?
- 24. Autotools將數據文件複製到臨時區域
- 25. 創建樹,而無需使用臨時區域
- 26. GetSaveFileName()沒有返回CD刻錄臨時區域的路徑XP
- 27. 混帳:文件不被添加到該臨時區域
- 28. Magento的商店標識與秩序#秒 - 臨時區域
- 29. Hadoop的例外 - 清理臨時區域/staging/test/.staging/job_201211221353_0010
- 30. 如何保存我的臨時區域的當前狀態?
的可能重複[?什麼是交換的最短途徑演出和Git中不分階段的變化(http://stackoverflow.com/questions/3573410/what-is-最短路到交換分階段和非分段更改在git) –
哇,感謝您的鏈接。不一樣的搜索條件,但同樣的問題,的確如此。 – moala