為什麼我在git上提交代碼都會重複提交別人更新的代碼?
01-28
在公共分支上開發,每次開發完代碼後,我add,commit後我的代碼。push之前,我會先Pull下別人更新的代碼,有衝突時會解決衝突,然後add commit,最後再Push。顯示了 我影響了這些代碼,而這些代碼竟然包括了別人更新的代碼,我這樣操作有錯嗎,會不會有覆蓋別人代碼的風險啊?
不會。他就是這樣的,你不用理。如果你覺得不保險的話,你可以把master上面允許修改歷史的許可權去掉,這樣你就再也不可能不小心搞破壞了,包括reset之後push什麼的會直接失敗。
唯一可能顯示你修改別人代碼的可能,就是解決衝突的時候你真的改了別人修改的那一行,哪怕只是改了一個空格,也就算你改過了。
在master上git pull,在你自己的branch上git rebase master就沒這個問題。。
Git教程 廖雪峰
Git 官網
先推薦這兩個網站去把Git好好了解一下,然後再來問這個問題。我覺得百度比知乎應該更好用,先了解原理再來明白現象。
分析一下,你在Commit的時候把別人的代碼也一同提交了,說明git認為你改過這個代碼,就這麼簡單,你改過,你改過,你改過。不管你是解決衝突還是刪了一個空格,都說明你改過,既然你改過了版本就更新了,所以就會一起提交上去了。
重看了一下你的流程,感覺不妥,建議這麼操作:0. (add與commit,這是你在本地已經做的)1. git fetch (注意不要用pull)2. git rebase
3. 如果無衝突,轉8;如果有衝突,轉4
4. 解決衝突5. git add (解決了衝突的文件)6. git rebase --continue7. 轉38. git push
9. 完成這樣你的提交會在遠端分支的基礎上重做一遍,你的提交就順暢地安排到了時間線的尾部了。為啥不用sourcetree可視化工具呢,不過你的這個流程也是沒什麼問題的。
不是應該先編輯,然後pull 解決衝突,add commit push嗎?
評論有提到說因為衝突不能pull的問題,可以git stash 然後pull 。git stash pop解決衝突就好了git pull --rebase origin XXX
你說的是衝突,就是你在改的過程中,別人有新的patch更新了,並且更新的文件恰好你在改。
解決衝突是有可能會覆蓋,所以你改完commit的時候,最好用gitk這個gui工具看看你這個patch到底改了什麼,是不是把人家的代碼也改了。是你 merge 的當然要你負責啊
沒有衝突,不會有任何問題!其實git pull的默認用法有點問題,改成默認rebase回好不少,對於一兩個commit的修改,merge太雜亂了!
用rebase
下次這樣pullgit pull --rebase origin xxxx
推薦閱讀:
※Git常用命令
※【Trac】瀏覽器中查看源碼庫
※如何理解git的快照?
※Working with Git | Git 與 GitHub
※git 中如何撤銷部分修改?