標籤:

為什麼我在git上提交代碼都會重複提交別人更新的代碼?

在公共分支上開發,每次開發完代碼後,我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 --continue

7. 轉3

8. 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


下次這樣pull

git pull --rebase origin xxxx


推薦閱讀:

Git常用命令
【Trac】瀏覽器中查看源碼庫
如何理解git的快照?
Working with Git | Git 與 GitHub
git 中如何撤銷部分修改?

TAG:Git | 代碼管理 |