常用指令:
查看A文件是誰最近修改的:git log A (會打印出commit號)
查看某條具體提交修改的內容:git show commit號
查看當前文件某一行是誰修改的:git blame 文件名
回退本地代碼到哪一筆提交之前:git reset --hard commit號
回退代碼的方法:
對於一個Git庫,回退到服務器,則使用:
- Git log
- Git checkout 6b78a8536fdcc25c20778b4fa8c4c301e096bc2f
或者
git reset --hard 6561422e8c406631230c1179a56454bc43c2c57b
表示該節點之後的都被回退掉了
一、初始化代碼庫
1、mkdir 文件目錄,例如:mkdir project_N8
2、cd 文件目錄,例如:cd project_N8
3、拉項目代碼
①、repo init初始化repo當前目錄
拉整個項目代碼
repo init -u URL –b 分支 –m xml文件,例如:repo init -u ssh://192.168.10.18:29400/MTK6750/manifest -b master -m N8_L1_IOS.xml。 (注此時的分支應該是遠程庫的分支,可以用git branch –a查看當前所有分支)
拉一個具體的git庫下來:比如拉一個vendor目錄:
git clone ssh://192.168.10.18:29400/MTK6750/vendor/mediatek/proprietary/custom
然後切換到對應分支:git checkout N8_L1_IOS.xml (綠色的部分和repo init的一樣)
[如果只拉某一個文件,即git庫,則就下一步不需要repo sync了,直接進入對應生成的目錄------執行git branch –a------check到對應的分支:git checkout 分支名]
②、repo sync,同步代碼到本地
【若是在主目錄裏新建文件,需要SCM的人提交,我們提交沒權限,等他們加好了,我們再更新本地庫就好了,只是repo sync不行,要麼重新拉代碼,要麼刪除build文件夾裏的makefile: rm -rf Makefile,可以直接刪除build文件夾,執行repo sync build -cj4命令即可】
- repo sync –cj16 “c表示更新當前分支即可”
- make ptgen –j16 “ptgen”表示讓當前修改也立即生效,否則當前修改無效
二、創建本地開發分支
查看當前分支:Git branch -a
//若自己就不在分支上,或者所在分支不對,則查看分支
ls .repo/manifests
repo init -m H970_native.xml 切換到這個分支
repo sync 重新同步
- repo start 分支 --all 切分支命令
- 切完後查看一下是否ok: git branch,查看當前分支情況 (branch 分支的意思)
三、修改代碼並提交
- cd 文件路徑,例如:cd packages/apps/Settings
- git status,查看有哪些修改文件.
- git add 文件路徑,例如:git add src/com/android/settings/Settings.java(注:這個路徑就是所修改文件的路徑,即由git status命令獲得的)
快捷方式:git add . (點)可以一次性提交很多對應目錄下的修改文件。
注意1:提交刪除的文件:git rm 文件路徑
注意2:添加並不等於提交,提交是git commit –m “註釋”
4. git status,查看文件是否添加正確 (修改文件路徑有紅色變成綠色)
5. git commit –m “註釋”,例如:git commit –m “xxx xxx”
(commit向本地版本庫提交代碼的命令,-m選項是添加提交註釋,如果添加了,可以在版本歷史中看到。)
當自己寫的git commit報錯時,修改格式:
1類問題:git config --global core.editor vim
二類問題:git commit --amend命令是當該文將剛剛提交到服務器而並沒有merged,此時再補充修改
把git commit -m "BUG ID:none DESCRIPTION:添加cxlite B_BOM 配置"
改成:
git commit --amend "BUG ID:none DESCRIPTION:添加cxlite B_BOM 配置"
- 如果刪除的代碼很多,則先用命令git add --all (git add .) 然後用命令git commit -am "BUG ID:none DESCRIPTION:xxx" -am表示add and move
如果用命令git rm 的話就要一句一句的提交,該命令不好。
git commit -am "BUG ID:none DESCRIPTION:過modem checklist"
6、git checkout 文件路徑,還原無需提交的修改文件,例如:git checkout src/com/android/settings/ActivityPicker.java
若有很多,則用:git checkout - 即:回退所有
在沒有提交到本地庫之前執行此命令的話,即在git add和git commit –m執行之前,則自己修改的代碼就不會被保存<可以用git diff查看一下>;在提交到本地庫之後執行此命令的話,即把自己修改的代碼添加到文件中,讓自己目前的代碼和本地庫上的代碼一樣。相當於保存更新了一下。
[自己添加1:當修改代碼太多時要repo syncs 時會出現錯誤,這時可以用兩條代碼回退回來,git config --global alias.unstage 'reset HEAD --'
git config --global alias.restore 'checkout --' ,
這兩條是宏定義,即把一個長的命令變短。執行它們之後我們纔可以執行後面的命令,執行完後就自動添加到了~目錄的.gitconfig文件裏。
具體執行命令:git unstage * 還原當前目錄已經commit後的代碼, git restore * 還原當前目錄修改過的,用命令git status查看變爲紅色的代碼,都可以被還原,即在執行commit之前的代碼]
【自己添加2:git clean -fd;git reset --hard;git pull --rebase 一起執行,返回自己還沒有提交的修改代碼{ git clean -fd 刪除生成的多餘文件;git reset --hard 還原其它修改的內容;git pull --rebase 同步更新代碼,以防別人剛纔又合入新的patch}】
如果commit之後的話,直接git reset –hard不可以,要按以下命令。
Git log
git reset --hard 6561422e8c406631230c1179a56454bc43c2c57b
表示該節點之後的都被回退掉了。
【******提交報錯時:自己添加3:回退已經commit的代碼:git commit --amend 進去之後保存正確的格式,保存:ctrl+x 退出:enter.然後在git push
詳情請看郵件,轉發: 關於研發團隊git提交commit message規範格式正式上線使用的通知】
跟大家分享個今天碰到的git commit --amend修補提交用法,當有兩筆提交的時候,一般運行git commit --amend的時候修改的是最近一筆提交的信息;而你想修改第一筆提交的信息,這時候你需要運行指令:git reset --soft commit_id; 其中commit_id爲你git log查看到的commit記錄,之後你再git commit --amend修改的就是你指定的第一筆提交的信息了。
7. git pull --rebase,更新本地當前節點至最新節點(拉直節點線),避免代碼merge時衝突,若rebase失敗,請參考第五步 (rebase重定基底的意思)
【更新本地代碼:連同自己的修改也改變git reset --hard HEAD~~】
同事給的:repo forall -c git reset –hard 可以在主目錄執行
回退已經提交到服務器上的代碼,而且本地修改還在:
git reset --mixed HEAD^
四、提交至遠程gerrit庫
git push origin HEAD:refs/for/遠程分支名,或cd 至代碼庫根目錄(HIOS_C8)【可以不用到根目錄】,然後repo upload . ,例如:git push origin HEAD:refs/for/master 或 cd 到項目跟目錄repo upload .
五、解決rebase時文件衝突導致merge失敗問題
- git status,查看哪些文件有變動.
-
git diff “變動文件”(這是可以查看到修改的具體代碼)
-
vi “變動文件”,或者其他方式打開變動文件,手動修改衝突的地方,並保存
- git add “變動文件”
- git rebase –continue 更新本地當前節點至最新節點
- 完成後,參考第四步提交 繼續提交
六、如何查看分支信息:
(1)首先是明晰提交分支,有以下兩種方式獲悉:
1、查看.repo/manifest.xml文件中的revision字段
2、查看本地庫.git/config文件下的分支merge選項字段
(2)之後的操作和單git庫修改代碼、提交、push方法是一致的,只是要在單獨的git庫下使用git命令,可用repo list查看哪些目錄是git庫,也可查詢.repo/manifest.xml文件,path字段代表的目錄即爲git倉庫
git pull --rebase #代碼修改前獲取最新代碼(--rebase 避免服務器產生過多的合併分支)
git add changefile #添加 修改過的文件,git status 可查看工作區代碼修改狀態
git commit #按照信息模板填寫提交信息。不能使用git commit -m 命令
git pull --rebase #如上
git push origin HEAD:refs/for/master #分支名根據實際情況,把master替換成對應的分支名