? ? ? 說來慚愧止邮,雖然身為一個(gè)低端的android碼農(nóng)奏窑,但是我一直很害怕使用git良哲,原因是進(jìn)入工作后一直是一個(gè)人開發(fā)助隧,剛開始接觸git時(shí)并村,由于不知道什么是gitignore文件,導(dǎo)致將apk包提交推送上去了棚潦,也不知道為啥膝昆,后來一直就推送遠(yuǎn)端失敗,結(jié)果我就一用硬盤保存我寫的代碼妹窖。再后來骄呼,新開了一個(gè)倉庫,但是一個(gè)人也就隨便用用 add ,commit和push這三個(gè)方法隅茎,直到今年的二月下旬辟犀,我終于忍不了了耻蛇,下決心想學(xué)會git的命令。學(xué)完后跃捣,向眾位大佬學(xué)習(xí)疚漆,寫一篇文檔刁赦,記錄一下使用git的方方面面甚脉,以便于遺忘了進(jìn)行查找。
? ? ? git的歷史大家隨便百度就能知道狡耻,過去不會的時(shí)候感覺為啥會有g(shù)it這個(gè)東西猴凹,現(xiàn)在稍微會了一些郊霎,感覺確實(shí)方便了不少。下來我來記錄我學(xué)到的和常用的命令进倍。
? ? ? 首先給大家推薦一個(gè)b站上的將git命令的課,這個(gè)課我覺得是講的很詳細(xì)的毙籽,我也是跟他學(xué)的坑赡,大家可以看看視頻地址
? ?配置用戶名和郵箱
git config --global user.name "用戶名" ????????配置或修改用戶名
git config --global user.emal "532886747@qq.com"? 配置或修改郵箱
git config --list 查看配置項(xiàng)
git config user.name 查看用戶名
git help 查看git幫助
git config --global --replace-all user.name “你的用戶名” 修改你的用戶名
git config --global --replace-all user.email “你的郵箱”? 修改你的郵箱
其中毅否,當(dāng)輸入--list的時(shí)候會發(fā)現(xiàn)git還停留在:這個(gè)狀態(tài)蝇刀,這個(gè)時(shí)候我們按回車鍵,會一直顯示未顯示的下一行捆探,當(dāng)出現(xiàn)(END)的時(shí)候我們按q就可以了黍图,當(dāng)然也可以直接按q奴烙,這樣就退出了切诀。
?管理git項(xiàng)目
git init? 生成.git文件 ,被git管理
git init [name]? 如果加上文件名 則是先創(chuàng)建一個(gè)文件名丰滑,然后在生成.git文件
git add [filename]? 添加文件被追蹤褒墨,添加到暫存區(qū)
git add .? ? 添加所有文件被追蹤哄芜,添加到暫存區(qū)
git status? 查看文件的狀態(tài)
git commit -m “描述”
git commit -am 相當(dāng)于 add. + -m
每次commit的時(shí)候都會生成一個(gè)版本认臊。
當(dāng)時(shí)用git status 查看狀態(tài)的時(shí)候锄奢,只要文件有被更新過或者新創(chuàng)建一個(gè)文件,那就會顯示出來书在,如果文件沒有被add .拆又,就會顯示untracked files 該文件未被追蹤 帖族。
當(dāng)時(shí)用git add 后在查看狀態(tài),就會變成 文件就會變色
當(dāng)被commit 后甚垦, 會顯示 master(提交的分支) 艰亮, root-coomit (第一次提交)挣郭,0c5ae36(版本號)兑障,提交(提交時(shí)的說明)
1 file 一個(gè)文件被改動(dòng),1 insertion 一個(gè)文件被添加
log追蹤
git log 相當(dāng)于你的提交日志
git log -p -2 最近兩次提交內(nèi)容的不同
git log --author?
git log --oneline 簡化版的git log,只顯示一行先蒋。
git log --graph 查看版本線圖
git log --pretty=format 打印出格式化的日志
追蹤文件修改前后的不同
git diff 查看文件和之前的修改的不同
git diff --staged 在stage狀態(tài)查看修改的不同 (就是當(dāng)git add .的時(shí)候)
當(dāng)你需要對比和上一次提交代碼之前修改代碼不同的時(shí)候竞漾,可以用這兩個(gè)命令來實(shí)現(xiàn)
文件忽略.gitignore
/node_modules? 忽略node_modules文件夾下所有文件
*.log? 忽略.log結(jié)尾的文件
&.zip 忽略.zip結(jié)尾的文件
git rm? -r -- cached. 把已追蹤的文件忽略
撤銷追蹤操作? 一鍵還原
git checkout -- [filename]? ? ? ? ?恢復(fù)到上一次的狀態(tài) 就是切到上一步提交的版本
git reset HEAD [filename]? ? ? ? 撤銷當(dāng)前文件的追蹤
版本回退(慎用)
git?reset --hard HEAD ^? ? ? ? ? ?回退到上一個(gè)版本
git reset --hard HEAD ^^? ? ? ? ?回退到上上一個(gè)版本
git reset --hard HEAD [hash號]? ? ????回退到指定hash的版本
git reflog? 指針理解
回到舊版本(推薦)
git checkout [hash號] -- [filename]???????? 將某一個(gè)文件切回到版本號
git checkout [hash好] -- .???????? 將所有切回到這個(gè)版本
版本回退和回到版本的概念是不同的鳞仙,如果是版本回退 :v1 -> v2 -> v3 笔时,如果我要回退到v2這個(gè)版本,那么v3這個(gè)版本就會被刪掉借笙。回到某個(gè)版本則不會刪掉v3這個(gè)版本盗痒,而是v3的指針會指到v2俯邓,變成v1 -> v2 -> v3 -> v2熔号。
建立切換分支刪除分支(重點(diǎn))
git branch [name]? ?????????創(chuàng)建一個(gè)分支跨嘉,不加名字就是展示分支
git checkout [branch name]????????????切換分支
git checkout -b [branch name]??????????建立和切換同時(shí)進(jìn)行
git branch [name] -d????????????刪除一個(gè)分支
git branch [name] -D????????????強(qiáng)制刪除分支
分支的作用就是當(dāng)多人開發(fā)的時(shí)候祠乃,不影響生產(chǎn)分支的情況下 ,大家各自開發(fā)各自的琴拧,當(dāng)需要合并的時(shí)候蚓胸,再合并。
當(dāng)你誤刪了分支怎么辦除师?1.拿到被刪分支的hash值沛膳。2.git branch [hash值] 分支就會回來了。這個(gè)方法我沒試驗(yàn)過汛聚。?
分支的創(chuàng)建和切換非常重要锹安,我之前就怕合并(原罪是自己too young),一定要練習(xí)熟練倚舀。
合并分支和沖突的解決(重點(diǎn))
git merge [branch name]? ????????講name分支合并到目前所處的分支
git status ????????查看分支沖突的原因
git merge --abort ????????忽略合并
手動(dòng)選擇正確內(nèi)容
git commit?
首先在dev-test的分支下修改了代碼
這時(shí)commit代碼叹哭,在test分支下已經(jīng)生成了一個(gè)版本
這時(shí)我切換分支到develop并在相同的位置寫了這樣的代碼并提交。
這時(shí)风罩,我打算將develop分支上的內(nèi)容合并到dev-test分支 于是有了以下的操作,當(dāng)我打算合并的時(shí)候舵稠,git報(bào)錯(cuò)超升,分支沖突在myActivity這個(gè)類入宦,翻譯為(自動(dòng)合并失敗,修復(fù)沖突并提交結(jié)果)
在android studio中會顯示出沖突的地方廓俭,HEAD到=代碼 當(dāng)前分支的內(nèi)容 =到develop 代表develop分支(即你打算合并的分支)的內(nèi)容,這個(gè)時(shí)候就可以取舍了唉工,可以根據(jù)自己的需求刪除或保留沖突的地方研乒。(git status也可以查看出具體沖突的文件)
接下來就是用git add. ,git commit 這兩個(gè)方法 然后會出現(xiàn)以下情況,這時(shí)候你將沖突的描述寫完后
添加描述淋硝,然后摁下ESC 輸入:wq雹熬。最后回車,這樣沖突就解決了谣膳。
總結(jié):當(dāng)合并分支發(fā)生沖突的時(shí)候竿报,有兩種解決方式:1.手動(dòng)解決沖突,看哪些代碼需要留下继谚,哪些代碼需要?jiǎng)h除烈菌。這種方式的前提是你知道哪些代碼需要合并。2.忽略合并花履,當(dāng)前代碼不知道哪些需要留下芽世,哪些需要?jiǎng)h掉的時(shí)候,就是用--abort方法诡壁。
通過命令查看版本線圖
git log --graph
git log --oneline --graph? ??
git log --oneline --graph --all? ? 查看所有分支下的線圖
git log --oneline --graph -[number]? ??
快轉(zhuǎn)機(jī)制的意義
快轉(zhuǎn)實(shí)際就是當(dāng)前master的將來時(shí)
git merge branchname --no-ff? ?
更多合并的方法
git merge --no-ff --no-commit [branchname]
git merge --squash [branchname]????不想在合并分支時(shí)體現(xiàn)你多次commit記錄的話济瓢,就用這個(gè)方法
git reset --hard ORIG_HEAD? ????????回退到源版本,也就是最初的版本
一次性刪掉所有不想要的分支
git branch --merged i egrep -v "(^|maseter|develop)" | xargs git branch -d ????????括號里代表不想刪的分支
今天先記錄這么多妹卿,過兩天補(bǔ)充跟遠(yuǎn)端有關(guān)的筆記旺矾。
補(bǔ)充一下?
如何合并分支中的部分提交?
1.首先查看需要合并的分支中提交的hash號
2.切換到主分支, 使用? git cherry-pick hash號 (這個(gè)hash號是分支中提交的hash號)
3.然后就ok了