GIT 技巧
為什么80%的碼農都做不了架構師?>>> ??
1、git撤銷本地修改
git reset --hard origin/master git pull2、git回退到前n個版本
如下為向前回退3個版本,git reset –hard HEAD~3
3、git多用戶提交沖突一
場景:用戶UserA修改了文件File1,用戶UserB也修改了文件File1并成功merge到了服務器上,而UserA和UserB改動了同一個代碼塊,當UserA拉取代碼時git無法merge此改動,就會出現如下錯誤提示,error: Your local changes to the following files would be overwritten by merge: cn/trinea/appsearch/MainActivity.java
Please, commit your changes or stash them before you can merge.
這時
(1) 如果希望保存本地改動并拉下最新服務器代碼,手動merge,使用命令如下:
git stash git pull git stash pop git diff -w cn/trinea/appsearch/MainActivity.java 其中git stash表示備份當前工作區內容到git棧中,并使當前工作區內容與上次提交時一致,然后git pull拉取最新代碼,git stash pop表示從Git棧中讀取最近一次保存的內容,恢復工作區的相關內容,最后git diff表示手動merge你之前沖突的文件
(2) 如果希望服務器上版本完全覆蓋本地修改,使用如下命令回退并更新:
git reset --hard git pull
4、git多用戶提交沖突二
場景:用戶UserA提交了change A,沒有merge,之后用戶UserB提交了change B,merge成功。當merge change A時出錯,會提示,The change could not be merged due to a path conflict.
Please rebase the change locally and upload the rebased commit for review.
?
大多數人的解決方式都是拷貝改動代碼,并重拉最新代碼Beyond Compare,重新提交。其實幾條命令就可以搞定,gerrit上先abandon原來的提交,后執行如下命令:
git reset --hard HEAD~2 git pull git fetch ssh://xxxx refs/changes/46/28146/1 && git cherry-pick FETCH_HEAD git push gerrit:xxxxxx HEAD:refs/for/xxxxxx 其中git reset –hard HEAD~2表示本地代碼后退兩級,如果有問題可以多后退幾次
git pull表示拉最新代碼
git fetch 表示獲取之前沒merge成功的改動到本地,后面跟的具體地址為gerrit上該change review頁面選擇cherry-pick、ssh后的地址,如下圖紅線標識
git fetch
git push 跟平時push一樣
?
5、git命令簡化
(1) 簡化git push命令通常git push命令為git push gerrit:aaa HEAD:refs/for/bbb,其實可簡化為git push。
編輯git庫下的.git/config文件,在[remote "remoteName"]下添加兩行
pushurl=gerrit:aaa.git
push=HEAD:refs/for/bbb
以后提交只需要用git push即可。
?
(2) 簡化git add *;git commit -a;git push命令,一步完成添加、commit、push
第(1)步配好后,你還可以將命令git add *;git commit -a;git push添加別名到系統path中,如下操作:
vim ~/.bash_profile,文件最后添加
# add by trinea.cn for git simplify
alias gpush='git add *;git commit -a;git push'
source ~/.bash_profile
這樣以后只需要gpush即可完成添加、commit、push,當然你也可以取其他的別名如gp、gitpush、gitp。
轉載于:https://my.oschina.net/liucao/blog/488607
總結
- 上一篇: Array的javascript数据结构
- 下一篇: inotify+rsync