Git 疑難雜癥
1、git stash pop 顯示 xxx already exists, no checkout
當我們先使用 git stash save -u '保存信息說明' 來儲藏更改,然后拉取代碼 git pull,如果你的本地修改有新建文件,遠程也有新建文件,并且兩者同名,此時應用儲藏 git stash pop 就可能會報錯: xxx already exists, no checkout。新建且沖突的文件會被提示。
此時我們可以使用:
git stash branch branchName
上面的命令是新建了一個分支。應該是基于最新的儲藏處于的倉庫版本來建立分支,并且該分支已經應用了最新的儲藏(目前沒有驗證過)。當你將 stash 運用到最新版本的分支后發生了沖突時,這條命令會很有用。
新建了該分支后,就可以通過切換分支,合并分支來應用你的儲藏了。
如果你需要指定某個 stash,你可以指明 stash id。
git stash branch <name> stash@{1}
或者你可以創建一個新分支,然后在新分支上刪除已存在的文件,在新分支上應用儲藏,然后在工作分支上合并新分支即可。
2、git commit 提示Please supply the message using either -m or -F option
使用不帶參數的 git commit 命令有可能會提示Please supply the message using either -m or -F option,這是因為系統的默認的文本編輯器 vi 有問題,我們可以為 git 換一個默認的編輯器,比如 vim。輸入下面命令:
git config --global core.editor "vim"
然后就可以使用 git commit 命令了。此時系統會彈出文本編輯框讓你輸入版本信息。
如果你不在文本編輯器中輸入版本信息而是直接提交的話,此時的提交信息就會由系統自動生成,比如是:Merge branch xxx of xxx into xxx 之類的合并提示信息。
3、誤操作git stash drop,如何恢復刪掉的stash
參考:https://blog.csdn.net/lnktoking/article/details/108281589
4、如何將某個分支的指定commit提取出來應用到其他分支
git cherry-pick命令的作用,就是將指定的提交(commit)應用于其他分支。
git cherry-pick <commitHash>
使用 git cherry-pick 的話將會直接應用修改并自動提交一個版本,添加一個 -n 參數就不會自動提交版本:
git cherry-pick -n <commitHash>
參考:http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html
4、Git已提交commit到遠程倉庫,如何回退版本
可參考:https://blog.nowcoder.net/n/a9cb57d9343b43b8a645ca8ba3dd46cd
其實總結起來也就幾種方法,如下:
- 手工刪除需要回退的commit的修改,然后重新提交一個commit到遠程倉庫
- 使用git reset --hard 強制回退版本,并通過 git push --force 強制推送。
- 缺點:如果需要回退的版本后面已經提交了幾個版本,該命令會將后面的提交也刪除掉,其他同事的提交可能就不見了
- 缺點:其他同事也需要執行 git reset --hard 回退版本才行,所以不推薦該方法。因為其他同事的本地分支在你的前面,所以版本會直接往前,不會以你強制提交的為準
- 使用git revert commitId 消除某個版本的提交,并通過 git push --force 強制推送。
- 缺點:如果需要消除的版本的后面的版本跟需要消除的版本修改了同一個文件,就會產生沖突,此時 revert 命令應該會失敗。
所以以上推薦第 1、3 方法

浙公網安備 33010602011771號