Android开发者必看:Git使用过程中的一些常见场景问题总结
10. 加入過歷史版本的文件,因某些原因被刪除了想恢復
git checkout <commit_id> – <file_name>
另外你也可以用reset命令來完成
11. 需要單獨把多次提交中的某一次提交從你的分支遷移到另外一個分支上,即跨分支應用commit
git cherry-pick <commit_id>
比如:我想把以下分支
A-B master
C-D-E-F-G develop
中的D,F 兩次提交移動到master分支,而保持其他commit不變,結果就像這樣
A-B-D-F master
C-E-G develop
那么,思路是將D,F 用cherry-pick應用到master分支上,然后將develop分支對master分支變基。
$ git checkout master
$ git cherry-pick D
$ git cherry-pick F
$ git checkout develop
$ git rebase master
注意有些情況下使用cherry-pick會存在沖突,解決方法和我們平時合并分支遇到沖突一樣。
12. 遇到文件沖突,可以手動解決,或者用你配置的工具解決,記得把文件標位resolved:add/rm
如:常見的拉取同事的代碼合并引起沖突
1. 手動處理沖突
2. 文件標志位置為resolved:git add <file_name>
3. 繼續合并 git merge --continue
當然也可以選擇放棄合并:git merge --abort
13. 讓自己本地分支上面的每一次提交日志變得更有意義,有時候需要我們選擇有意義的提交日志信息合并上去
比如我們在bugfix分支上面由于修改bug提交了很多次,修復好了之后,我們想把這些提交合并入我們的master分支
git checkout master
git merge --squash bugfix
git commit -m “bug fixed”
上面操作會將bugfix分支上的所有commit都合并為一個commit,并把它并入我們的master分支上去。這里還有一點需要注意的是:–squash含義代表的是本地內容與不使用該選項的合并結果相同,但是不提交,不移動HEAD指針,所以我們要另外多一條語句來移動我們的HEAD指針,即最后的commit。
14. 有時候需要整理我們本地的commits,可以使用Squash
git rebase -i
舉例:
git rebase -i HEAD~5
執行完后,Git會把所有commit列出來,讓你進行一些修改,修改完成之后會根據你的修改來rebase。HEAD-5的意思是只修改最近的5個commit。
pick 033beb4 b1
pick b426a8a b2
pick c216era b3
pick d627c9a b4
pick e416c8b b5
Rebase 033beb4…e416c8b onto 033beb4
Commands:
p, pick = use commit
r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but mel
《Android學習筆記總結+最新移動架構視頻+大廠安卓面試真題+項目實戰源碼講義》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整內容開源分享
d into previous commit
f, fixup = like “squash”, but discard this commit’s log message
x, exec = run command (the rest of the line) using shell
If you remove a line here THAT COMMIT WILL BE LOST.
However, if you remove everything, the rebase will be aborted.
上面pick是要執行的commit指令,另外還有reword、edit、squash、fixup、exec這5個,具體的含義可以看上面的注釋解釋,比較簡單,這里就不說了。 我們要合并就需要修改前面的pick指令:
pick 033beb4 b1
squash b426a8a b2
squash c216era b3
squash d627c9a b4
squash e416c8b b5
也就是下面這4個提交合并到最前面的那個提交里面,按esc,打上:wq提交保存離開。 接著是輸入新的commit message
b
This is a combination of 2 commits.
The first commit’s message is:
b1
This is the 2nd commit message:
b2
This is the 3rd commit message:
b3
This is the 4th commit message:
b4
This is the 5th commit message:
b5
Please enter the commit message for your changes. Lines starting
with ‘#’ will be ignored, and an empty message aborts the commit.
Not currently on any branch.
Changes to be committed:
(use “git reset HEAD …” to unstage)
modified: a.txt
其中第一行的b就是需要我們輸入的新信息,同樣編輯完保存,出現類似下面的信息:
Successfully rebased and updated refs/heads/develop.
最后可以用git log指令來驗證commits是不是我們要變成的樣子。
15. 多人協作開發項目,想知道某個文件的當前改動情況
通常查問題時想知道某個文件的某部分代碼是誰改動的,那么git blame 就派上用場了。
git blame <file_name>
你也可以具體指定到某一行或者某幾行代碼
git blame -L <start_line>,<end_line> <file_name>
16. 執行push命令向多個倉庫同時提交代碼
有時候會做代碼備份,將代碼保存在幾個不同的Git代碼管理平臺,這時候就需要用到了
修改本地倉庫目錄下.git/config文件
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote “origin”]
url = git@github.com:yuxingxin/blog.git
url = ……
url = ……
fetch = +refs/heads/:refs/remotes/origin/
如上 在remote處可以添加多個遠程地址。
17. 從多次提交中快速定位某一次提交的bug
開始 bisect
$ git bisect start
錄入正確的 commit
$ git bisect good xxxxxx
錄入出錯的 commit
$ git bisect bad xxxxxx
然后 git 開始在出錯的 commit 與正確的 commit 之間開始二分查找,這個過程中你需要不斷的驗證你的應用是否正常
$ git bisect bad
$ git bisect good
$ git bisect good
…
直到定位到出錯的 commit,退出 bisect
$ git bisect reset
總結
當然了,git的一些常見場景,還遠不止這些,限于本人能力有限,如果你在平時的工作中遇到一些很實用的命令,也歡迎反饋給我,我好一并學習。更多的詳細可以參考之前總結的一系列文檔:?https://devops.yuxingxin.com。 學習git命令是一件很有意思的事情,我想它能幫助使用git命令的人更好的理解這一代碼管理工具,從而不至于犯一些低級錯誤,MobDevGroup網站上面也分享過幾個學習命令的網站,可以供參考:https://mobdevgroup.com/tools/assistant
最后
除了Git工具的使用,我還整理了一份Android架構學習資料,這份資料包含當下字節跳動,騰訊等大廠重視的Android技術,還有這些大廠的面試真題和解析。
總結
以上是生活随笔為你收集整理的Android开发者必看:Git使用过程中的一些常见场景问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: xlwings画图
- 下一篇: 印象笔记 - 记录生活的点点滴滴