git雜筆記本
2014-10-30 15:29:56

如何下載多個repo到同一個目錄?

  • 建立一個新的remote:
git remote add [remote_name] /path/to/other/repo/.git
  • 更新remote到最新狀態:
git fetch [remote_name]
  • 建立新的branch:
git branch [branch_name] [remote_name]/[remote_branch_name]

如何救回被刪除的檔案?

如果檔案被rm:

  • 如果你知道檔名,用git checkout-index即可:
git checkout -- [被rm的檔案]

或是

git checkout-index [被rm的檔案]
  • 如果你忘了刪了什麼檔,或是有許多檔案被刪除了,可以用git ls-file -d將被刪的檔案列出來:
git ls-files -d | xargs git checkout --

如果檔案被git rm:

  • 先用reset回復index的內容:
git reset HEAD
  • 再用前面的指令回復檔案:
git ls-files -d | xargs git checkout-index

如果檔案被git rm並git commit:

  • 如果你知道是在哪一次的commit刪除了檔案,你可以用git checkout從那次commit的前一次commit中回復被刪除的檔案:
git checkout [刪除檔案的那次commit]^ -- [被刪除的檔案]
  • 如果你忘了是在哪一次的commit刪除了檔案,先用git rev-list找出刪除檔案時是在哪一次的commit:
git rev-list -n 1 HEAD -- [被刪除的檔案]

接著再前面的指令回復檔案:

git checkout [刪除檔案的那次commit]^ -- [被刪除的檔案]
  • 上面兩個指令可以合在一起寫:
git checkout $(git rev-list -n 1 HEAD -- [被刪除的檔案])^ -- [被刪除的檔案]

利用git建立patch

git format-patch -s -n --stdout --text HEAD^..HEAD > file_name.patch

如何刪除branch

刪除本地端的branch,注意不能刪除所在的branch,要先checkout到其它的branch再進行刪除。-D是表示強制刪除,不檢查branch是否已經有合併至其它的branch。

git branch -d [要刪除的branch名稱]
git branch -D [要刪除的branch名稱]

刪除完本地端的branch,還想要刪除遠端對應的branch,那可以用push

git push origin :[遠端的branch名稱]

將已經commit到repo的檔案從repo中移出,但不刪除檔案

git rm --cached [被刪除的檔案]

清除在本地端的對應遠端已被刪除的branch

git fetch origin --prune

查看某個檔案的修改記錄

git log -p [檔案]