你問是否有更好的方法來處理你的情況,我相信有。但是,它可能不會完全解決您遇到的權限問題。
我建議不要使用git pull
命令。 pull
實際上是fetch
後跟merge
,但您無法控制此過程。首先運行get fetch --all
,您將收到所有遙控器的所有新提交。一旦這些更改被提取,您可以手動合併它們。這具有不移動您的HEAD
指針(即不更改文件系統中的文件)的優點。因此,您應該能夠在沒有任何操作系統權限問題的情況下獲得其他開發人員所做的更改。
對於我來說,這個過程通常類似於
$ git fetch --all
remote: Counting objects: 250, done.
remote: Compressing objects: 100% (69/69), done.
remote: Total 250 (delta 103), reused 76 (delta 76), pack-reused 88
Receiving objects: 100% (250/250), 64.16 KiB | 0 bytes/s, done.
Resolving deltas: 100% (116/116), completed with 37 local objects.
From github.com:org/repo
9b49e78..14dc510 master -> upstream/master
$ git rebase upstream/master mybranch
的rebase
在這種情況下使用merge
,而不是適用於由其他開發者,你只是fetch
版所做的最新更改頂部更改。如果沒有rebase
,您將被迫做出額外的承諾,將您的更改與其他人所做的更改合併。這是許可問題可能出現的地方,因爲rebase
正在改變您的HEAD
指向每個修改的提交的位置。
我希望這有助於!
如果我使用rebase,是否會丟失我所做的不在遠程存儲庫中的任何本地更改? – SVAN
如果您有未提交的更改,「rebase」將會失敗,告訴您有未提交的更改。如果所有本地更改都已提交,並且'mybranch'指向您的最新提交(即,當您進行最新提交時您位於'mybranch'),則不會丟失它。 「rebase」的目的是在「upstream/master」的變化之上移動你的本地變更。最終的結果就好像你在其他人將變更推送到「上游」之後開始了你的變更。 –