git操作失誤總結
操作步驟
clone你fork的項目
git clone xxxxx
.git
l添加原作者庫(該操作只需操作一次即可)
git remote add upstream xxxxx.git
這時候我們git remote -v 查看下版本庫,發(fā)現(xiàn)一個upstream,以后每次提交前,甚至每天上班前,,都要從upstream,fetch 然后合并到本地
然后再去提交自己的代碼到fork的項目,,命令行如下:
git fetch upstream
這個命令就是更新遠程git倉庫的代碼到本地(遠程倉庫的所有分支的代碼都會被更新到本地)這樣就不會在合并代碼時,有大量的沖突
git merge upstream/dev
將更新的代碼合并到本地代碼庫(此時代碼只在你的硬盤上,并沒有在你fork的庫中)
然后
git status
查看更新的代碼,,此時有可能你本地的代碼也有變動,,不過沒關系我們一起將代碼提交到fork版本庫
git add 選擇要提交的代碼,或者 -A 提交全部
git commit -m "備注"
git push origin dev (我的分支名字叫dev)
至此,,代碼已經提交到fork庫中了
然后我們創(chuàng)建合并請求
選擇自己的分支,,選擇要合并的分支
此時任務基本就完成了。
事情的起因:
此時只是發(fā)送了一個PR,,最終合并要管理員確認,,如果你有權限合并,那么一定要慎重,,因為合并操作不當,,很容易覆蓋其他人的代碼,造成不必要的損失,,但事情的起因有些復雜,,源于我的錯誤理解(事實也可以實現(xiàn)指定文件不提交):”gitlab指定文件提交“,比如說idea有自己的配置xml,如下圖:看著就是不順眼,。
此時作為程序員,強迫癥了,,干脆提交它,,然后指定這些文件不提交,于是我一路 git add -A ,直到代碼合并到upstream的dev分支,,理想是美好的,,我突然想到很多配置文件沒有處理,怎么就合并了,,于是我趕緊通知同事先不要更新(還好git可以撤銷合并,,居然包括了了100多個配置文件,有maven的,,有idea的,,還有代碼格式化的)但是如何指定這些文件不要合并呢?gitlab的瀏覽器可沒有這項功能,,只要提交了,,就必須全部合并過去,于是我就想
1.重新fork代碼,,并且master代碼回退,,這樣fork版本庫中的所提交的代碼就全部消失了,但是本地不要pull ,,保留修改
2.重新clone fork的代碼到一個新的路徑,,使用beyondCompare通過文件夾的方式比較不同,并合并到新的路徑上,
3.提交自己修改的文件,,然后再push ,再去合并
git rm --cache filename 可以刪除在本地倉庫中的文件,,但是文件還會保存在硬盤上,這個命令對于這些配置文件確實是實現(xiàn)了指定文件提交
這次的事件就算解決了,,但是還沒有結束
又過了一天,,又產生了新的代碼, 但是當我fetch upstream的時候顯示更新了2個文件,,然后 merge,,帶著自己的代碼push,然后去合并到master,在提交合并的過程中,,發(fā)現(xiàn)更新的這兩個java文件,,居然是綠色的,代表是新增的,,這令我很費解,,因為這是我剛跟新下來的,如果同時更新代碼,,一定會沖突的,,于是我就是用了 git rm --cache命令,先是字本地倉庫中刪除,,然后再push ,在合并,,然后再重新提交本地的java代碼(fetch更新下來的),這樣同事更新就不會沖突了,。
還有更悲催的事情
同事提交的一個controller不見了,,沒錯不見了,app同事訪問404,同事本地的環(huán)境tomcat 不能啟動,,比較改了一次又一次,,還是不能啟動,第一次錯誤是sql,。xml文件中有一個Head的多余單詞(沖突導致)我在解決沖突的時候,,忘了刪了(忙中出錯啊),,還有就是之前都可以啟動的tomcat,,現(xiàn)在必要要加入一個jar包才可以,還有就是因為格式化導致文件不一致的情況,,真的可以說是一次合并代碼產生的血案,。真的很心累,很有可能就是昨天合并代碼時候,,產生了代差,,導致有些代碼沒有更新到本地,,盡量讓組長來合并,如果自己合并代碼一定要慎重,,再慎重,,多余的代碼不要提交,如果看idea,。的配置文件不順眼,,在.ingore。xml中設置不顯示