很開心這次跳槽到了新公司,終於開始學習到系統的團隊相關軟體,在這裡記錄業務上碰到的所有git相關指令,也期許自己的技能能夠不停止的進步下去!
強制用遠端代碼覆蓋本地代碼
實際情況是在公司的幫助下開始使用Mac電腦 但是回去以後又使用了自己的電腦,而最新進度已經push到遠端分支
因此會有需求是要將本地代碼更新至遠端同步(注意這裡是強制覆蓋本地端)
1.git fetch --all //從遠程拉取最新的代碼 不合併
2.git reset --hard origin/分支名 //使用指定分支代碼 強制覆蓋代碼
3.git pull //從遠程拉取最新的代碼自動合併
當本地沒有想要拉取的分支,想直接拉取遠端的分支,且分支名相同
情況是這次專案中擔任的角色只是幫忙review代碼,以及UI等等, 也就是我的本地當實際上是沒有任何分支的,
而對方有在遠端上建立並也上傳了進度,這時候我想要在本地也新增和遠端一樣的分支, 好隨時pull下來查看目前進度
git checkout -b 本地分支 origin/远程分支
/*---b 本地沒有的分支會自己建一個--*/
刪除分支
記得先切換到非刪除的分支上才可以刪除該分支
本地
git branch -d <branch>
如果是遠程分支
git push <remote> --delete <branch>
在還沒push之前撤銷commit
主要的指令是使用 reset 但是根據後面參數的不同,而有稍稍不同的結果。參數分別是
- –mixed <= 是預設的參數, 回到上一次提交後的修改後的還未git add後的結果,相當於git reset --soft後加上git reset hard …
- -soft <= 只取消 commit 但保留文件的修改
- –hard <= 代碼恢復到前一commit_id 對應的版本
# 首先找到對應的commit id
git log
# 完成Commit命令的撤銷,但是不對代碼修改進行撤銷,可以直接通過git commit 重新提交對本地代碼的修改
git reset –hard id
捨棄合并,重新pull
情況是這樣, 當我們發現遠端的別的分支(當dev、uat、個人分支各自獨立時)有更新時, 而自己的分支也需要跟著遠端別的分支進行同步時, pull 完以後發現想要重新來但是會出現問題
或是當遇到 error: You have not concluded your merge (MERGE_HEAD exists).
也可以使以下步驟解決
# 保留本地的更改 , 中止合并
git merge --abort
# git reset --merge
git reset --merge
# 重新拉取
git pull
另外一種則是捨棄本地端的所有更改,讓遠地端版本覆蓋本地當版本 (!!慎用)
git fetch --all
git reset --hard origin/master
git fetch
救回不小心使用 hard 模式 Reset 了的 Commit
情況是有次將版本推送到dev環境時忘記將分之切回到個人的分支, 於是就在dev分支的情況下做了更動,後來commit以後發現了這個問題, 當時想用簡單的方式把現在的代碼進行備份然後使用git reset –hard .
悲劇的事情來了不知道怎麼回事備份沒備份好, 心急如焚的上網尋找解決方法
Git 裡有個 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
當 HEAD 有移動的時候(例如切換分支或是 reset 都會造成 HEAD 移動),Git 就會在 Reflog 裡記上一筆。從上面的這三筆記錄看起來大概可以猜得出來最近三次 HEAD 的移動,而最後一次的動作就是 Reset。所以如果想要取消這次的 Reset,就是「Reset 到它 Reset 前的那個 Commit」。在這個例子就是 e12d8ef,所以只要這樣:
git reset e12d8ef --hard
還好有找到解決方法不然一整天的辛苦要白費了!!
修改文件名稱 大小寫
git對於檔案的修改尤其只是修改大小寫很難偵測得到 , 需要直接用指令告訴他修改的結果
## 從text.text 修改為 Test.text
git mv test.txt Test.txt
以上不定時更新