問題1、fatal: refusing to merge unrelated histories
一、Git 的報錯
fatal: refusing to merge unrelated histories
新建了一個倉庫之后,把本地倉庫進行關聯提交、拉取的時候,出現了如下錯誤:
fatal: 'master' does not appear to be a git repository
fatal: Could not read from remote repository.
二、解決方案
在你操作命令后面加 --allow-unrelated-histories
?
git merge master --allow-unrelated-histories
$ git pull --allow-unrelated-histories
CONFLICT (add/add): Merge conflict in .gitignore
Auto-merging .gitignore
Automatic merge failed; fix conflicts and then commit the result.
這里由于我中間更換了代碼倉庫,然后又換回到原來的代碼倉庫,需要手動合并之后再進行 add、commit 即可。
如果你是git pull或者git push報fatal: refusing to merge unrelated histories
同理:
git pull origin master --allow-unrelated-histories / git pull --allow-unrelated-histories
問題2、warning: in the working copy of '...', LF will be replaced by CRLF the next time Git touche
一、Git的報錯
執行git add .的時候出現的警告“warning: in the working copy of ‘...‘, LF will be replaced by CRLF the next time Git touche”
新項目很多文件都是新建的,CR/LF是不同操作系統上使用的換行符:
CR(CarriageReturn回車'\r'):回到一行的開頭,ASCII代碼是13
LF(LineFeed換行'\n'):另起一行,ASCII代碼是10
二、問題分析
Dos和Windows平臺:
使用回車(CR)和換行(LF)兩個字符來結束一行,回車+換行(CR+LF),即“\r\n”;所以平時編寫文件的回車符應該確切來說叫做回車換行符。Mac 和 Linux平臺:只使用換行(LF)一個字符來結束一行,即“\n”;許多 Windows 上的編輯器會悄悄把行尾的換行(LF)字符轉換成回車(CR)和換行(LF),或在用戶按下 Enter 鍵時,插入回車(CR)和換行(LF)兩個字符。
三、解決問題
情況一:windows用戶
Git 可以在你提交時自動地把回車(CR)和換行(LF)轉換成換行(LF),而在檢出代碼時把換行(LF)轉換成回車(CR)和換行(LF)。因為git 的 Windows 客戶端基本都會默認設置 core.autocrlf=true
#提交時轉換為LF,檢出時轉換為CRLF:
git config --global core.autocrlf true
情況二:MAC用戶
Git 在檢出文件時不需要進行自動的轉換。然而當一個以回車(CR)和換行(LF)作為行結束符的文件不小心被引入時,這是肯定想讓 Git 修正。
所以,可以把 core.autocrlf 設置成 input 來告訴 Git 在提交時把回車和換行轉換成換行,檢出時不轉換:(這樣在 Windows 上的檢出文件中會保留回車和換行,而在 Mac 和 Linux 上,以及版本庫中會保留換行。)Linux 最好不要設置 core.autocrlf,因為這個配置算是為 Windows 平臺定制;
#提交時轉換為LF,檢出時不轉換
$ git config --global core.autocrlf input
情況三:Windows 用戶其他情況
如果你正在開發僅運行在 Windows 上的項目,可以設置 false 取消此功能,把回車保留在版本庫中:
#提交檢出均不轉換,你也可以在文件提交時進行safecrlf檢查
git config --global core.autocrlf false#拒絕提交包含混合換行符的文件
git config --global core.safecrlf true #允許提交包含混合換行符的文件
git config --global core.safecrlf false #提交包含混合換行符的文件時給出警告
git config --global core.safecrlf warn
Windows 上設置 core.autocrlf=false,倉庫里也沒有配置 .gitattributes,很容易引入 CRLF 或者混合換行符(Mixed Line Endings,一個文件里既有 LF 又有CRLF)到版本庫,這樣就可能產生各種奇怪的問題。
問題三、git commit -m 編輯后發現需要更改
在Git的提交命令git commit -m "message"中,-m選項用于指定提交信息。如果想要修改已經輸入的提交信息并將其應用到最新的commit上
使用下面的操作流程:
1、首先,通過運行git log或者git reflog來查看當前分支的提交記錄,確認需要修改的commit所對應的SHA值(commit ID)。
2、然后,使用git rebase -i <commit-id>命令進行交互式rebase操作,將<commit-id>替換為目標commit的ID。這會打開一個文本編輯器,顯示了從該commit之后的所有commits列表。
3、在編輯器中,將需要修改的commit所在行的pick關鍵字改成edit,保存并關閉編輯器。
4、Git會自動切換到被修改的commit,此時可以使用git commit --amend命令重新編輯提交信息。
5、完成編輯后,再次運行git rebase --continue命令,將更改應用到原始commit上。
6、若還有其他未處理的commit,則按照相同的步驟繼續進行rebase操作直到結束。
7、最后,使用git push origin <branch-name> --force命令將修改后的commit推送到遠程倉庫,注意加上--force參數以覆蓋原有的commit。