<div style="text-align:right;"><h6>2023/3/20</h1></div> # <center>GitHub 學習筆記 (三) 基本操作 </center> ## <center> (三) 實用的基本操作 </center> ### <center> Git - some useful tool </center> --- # **++前情提要++** >這篇主要是記錄一些自己之後可能經常會用到的 git 操作,避免自己金魚腦一下就忘記了。 ## **++(一) 在 repo 中增刪檔案/資料夾++** >小提醒:這裡記得都要到**要操作的資料夾路徑**進行噢! ### **++刪除檔案/資料夾++** 這裡分成兩種情況,一種是**刪除local (自己電腦)和 Git上的檔案**,另一種則是**單純移除 GitHub上的檔案**並保留 local 的檔案: ``` // Remove directory from Git and local git rm -r 'myFolder/myFile' // This deletes from filesystem git commit . -m "Remove directory(file)" git push origin <your-git-branch> ``` ``` // Remove directory from Git but NOT local git rm -r --cached 'myFolder/myFile' git commit -m "Removed folder/file from repository" git push origin <your-git-branch> ``` ## **++(二) commit 版本切換/ reset++** > 會需要用到這個是因為有時候 remote 端的版本和 local 端的版本沒有更新到一致,導致在 push 或 pull 的時候出現問題。這時候可以先 reset 到舊版本,重新 pull 完,讓 local 端更新到最新狀態後,再 push 一次。內容主要參考以下網址: > * [【狀況題】剛才的 Commit 後悔了,想要拆掉重做…](https://gitbook.tw/chapters/using-git/reset-commit) > * [【狀況題】不小心使用 hard 模式 Reset 了某個 Commit,救得回來嗎?](https://gitbook.tw/chapters/using-git/restore-hard-reset-commit) 1. 更改 commit 版本 首先要先確認有哪些版本紀錄: ``` $ git log -2 # previos 2 version $ git log --oneline # all commit history e12d8ef (HEAD -> master) add database.yml in config folder 85e7e30 add hello 657fce7 add container abb4f43 update index page cef6e40 create index page cc797cd init commit ``` 接下來可以選擇要退回到哪個版本,相對或絕對的方式都可以。 ``` git reset HEAD~2 # back to previous 2 version git reset 657fce7 # back to 657fce7 version ``` 如果想要退回剛剛 Reset 的步驟,只要 Reset 回到一開始那個 Commit 的 SHA-1 e12d8ef 就行了: ``` git reset e12d8ef --hard ``` 剛剛看起來拆掉的 Commit 就又接回來了。在這裡使用 - - hard 參數可以強迫放棄 Reset 之後修改的檔案。 ### 使用 Reflog 如果一開始沒有記下來 Commit 的 SHA-1 值也沒關係,Git 裡有個 reflog 指令有保留一些紀錄。借用上面的例子,但這次改用 --hard 模式來進行 reset: ``` $ git reset HEAD~2 --hard HEAD is now at 657fce7 add container ``` 不僅 Commit 看起來不見了,檔案也消失了。接著可使用 reflog 指令來看一下紀錄: ``` $ git reflog 657fce7 (HEAD -> master) HEAD@{0}: reset: moving to HEAD~2 e12d8ef (origin/master, origin/HEAD, cat) HEAD@{1}: checkout: moving from cat to master e12d8ef (origin/master, origin/HEAD, cat) HEAD@{2}: checkout: moving from master to cat ``` 如果想要取消這次的 Reset,就是「Reset 到它 Reset 前的那個 Commit」(很像饒口令)。在這個例子就是 e12d8ef,所以只要這樣 ``` $ git reset e12d8ef --hard ``` 2. Reset 的模式 > git reset 指令可以搭配參數使用,常見到的三種參數,分別是 --mixed (default)、 --soft 以及 --hard,不同的參數執行之後會有不一樣的結果。 <center> | 模式 | mixed 模式 | soft 模式 | hard 模式 | |-----------|------------|------------|------------| | 工作目錄 | 不變 | 不變 | 丟掉 | | 暫存區 | 丟掉 | 不變 | 丟掉 | </center> Reset 這個英文單字的翻譯是「重新設定」,但事實上 Git 的 Reset 指令用中文來說比較像是「前往」或「變成」,也就是「go to」或「become」的概念。實際上 git reset 指令也並不是真的刪除或是重新設定 Commit,只是「前往」到指定的 Commit,那些看起來好像不見的東西只是++暫時看不到,但**隨時都可以再撿回來**++。 ## **++(三) 實用小工具++** 1. 檢查自己在哪一個remote (換來換去很容易頭昏眼花啊...) ``` git remote -v (如果你發現你連到錯的remote...) git remote set-url origin https://github.com/USERNAME/OTHERREPOSITORY.git ``` 2. 檢查過去的commit紀錄 ``` git log ``` ``` git log --oneline ``` 3. 檢查目前所在的branch ``` git branch ``` ### **++後記++** >開始認真用之後發現有好多種指令要記得,剛開始不熟悉要一直翻來翻去太麻煩了,所以開了一個筆記紀錄,希望之後操作可以越來越順暢! #### 參考網址 1. https://docs.github.com/en 2. https://stackoverflow.com/questions/6313126/how-do-i-remove-a-directory-from-a-git-repository 3. https://git-scm.com/book/zh-tw/v2 <hr> <div style="text-align:right;"><h6>撰於 2023/3/30</h1></div>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up