? ? ? 說來慚愧,雖然身為一個低端的android碼農(nóng),但是我一直很害怕使用git,原因是進入工作后一直是一個人開發(fā),剛開始接觸git時,由于不知道什么是gitignore文件,導(dǎo)致將apk包提交推送上去了,也不知道為啥,后來一直就推送遠端失敗,結(jié)果我就一用硬盤保存我寫的代碼。再后來,新開了一個倉庫,但是一個人也就隨便用用 add ,commit和push這三個方法,直到今年的二月下旬,我終于忍不了了,下決心想學(xué)會git的命令。學(xué)完后,向眾位大佬學(xué)習(xí),寫一篇文檔,記錄一下使用git的方方面面,以便于遺忘了進行查找。
? ? ? git的歷史大家隨便百度就能知道,過去不會的時候感覺為啥會有g(shù)it這個東西,現(xiàn)在稍微會了一些,感覺確實方便了不少。下來我來記錄我學(xué)到的和常用的命令。
? ? ? 首先給大家推薦一個b站上的將git命令的課,這個課我覺得是講的很詳細的,我也是跟他學(xué)的,大家可以看看視頻地址
? ?配置用戶名和郵箱
git config --global user.name "用戶名" ????????配置或修改用戶名
git config --global user.emal "532886747@qq.com"? 配置或修改郵箱
git config --list 查看配置項
git config user.name 查看用戶名
git help 查看git幫助
git config --global --replace-all user.name “你的用戶名” 修改你的用戶名
git config --global --replace-all user.email “你的郵箱”? 修改你的郵箱
其中,當(dāng)輸入--list的時候會發(fā)現(xiàn)git還停留在:這個狀態(tài),這個時候我們按回車鍵,會一直顯示未顯示的下一行,當(dāng)出現(xiàn)(END)的時候我們按q就可以了,當(dāng)然也可以直接按q,這樣就退出了。
?管理git項目
git init? 生成.git文件 ,被git管理
git init [name]? 如果加上文件名 則是先創(chuàng)建一個文件名,然后在生成.git文件
git add [filename]? 添加文件被追蹤,添加到暫存區(qū)
git add .? ? 添加所有文件被追蹤,添加到暫存區(qū)
git status? 查看文件的狀態(tài)
git commit -m “描述”
git commit -am 相當(dāng)于 add. + -m
每次commit的時候都會生成一個版本。
當(dāng)時用git status 查看狀態(tài)的時候,只要文件有被更新過或者新創(chuàng)建一個文件,那就會顯示出來,如果文件沒有被add .,就會顯示untracked files 該文件未被追蹤 。
當(dāng)時用git add 后在查看狀態(tài),就會變成 文件就會變色
當(dāng)被commit 后, 會顯示 master(提交的分支) , root-coomit (第一次提交),0c5ae36(版本號),提交(提交時的說明)
1 file 一個文件被改動,1 insertion 一個文件被添加

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 .的時候)
當(dāng)你需要對比和上一次提交代碼之前修改代碼不同的時候,可以用這兩個命令來實現(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 ^? ? ? ? ? ?回退到上一個版本
git reset --hard HEAD ^^? ? ? ? ?回退到上上一個版本
git reset --hard HEAD [hash號]? ? ????回退到指定hash的版本
git reflog? 指針理解
回到舊版本(推薦)
git checkout [hash號] -- [filename]???????? 將某一個文件切回到版本號
git checkout [hash好] -- .???????? 將所有切回到這個版本
版本回退和回到版本的概念是不同的,如果是版本回退 :v1 -> v2 -> v3 ,如果我要回退到v2這個版本,那么v3這個版本就會被刪掉?;氐侥硞€版本則不會刪掉v3這個版本,而是v3的指針會指到v2,變成v1 -> v2 -> v3 -> v2。
建立切換分支刪除分支(重點)
git branch [name]? ?????????創(chuàng)建一個分支,不加名字就是展示分支
git checkout [branch name]????????????切換分支
git checkout -b [branch name]??????????建立和切換同時進行
git branch [name] -d????????????刪除一個分支
git branch [name] -D????????????強制刪除分支
分支的作用就是當(dāng)多人開發(fā)的時候,不影響生產(chǎn)分支的情況下 ,大家各自開發(fā)各自的,當(dāng)需要合并的時候,再合并。
當(dāng)你誤刪了分支怎么辦?1.拿到被刪分支的hash值。2.git branch [hash值] 分支就會回來了。這個方法我沒試驗過。?
分支的創(chuàng)建和切換非常重要,我之前就怕合并(原罪是自己too young),一定要練習(xí)熟練。
合并分支和沖突的解決(重點)
git merge [branch name]? ????????講name分支合并到目前所處的分支
git status ????????查看分支沖突的原因
git merge --abort ????????忽略合并
手動選擇正確內(nèi)容
git commit?
首先在dev-test的分支下修改了代碼

這時commit代碼,在test分支下已經(jīng)生成了一個版本

這時我切換分支到develop并在相同的位置寫了這樣的代碼并提交。

這時,我打算將develop分支上的內(nèi)容合并到dev-test分支 于是有了以下的操作,當(dāng)我打算合并的時候,git報錯,分支沖突在myActivity這個類,翻譯為(自動合并失敗,修復(fù)沖突并提交結(jié)果)

在android studio中會顯示出沖突的地方,HEAD到=代碼 當(dāng)前分支的內(nèi)容 =到develop 代表develop分支(即你打算合并的分支)的內(nèi)容,這個時候就可以取舍了,可以根據(jù)自己的需求刪除或保留沖突的地方。(git status也可以查看出具體沖突的文件)


接下來就是用git add. ,git commit 這兩個方法 然后會出現(xiàn)以下情況,這時候你將沖突的描述寫完后

添加描述,然后摁下ESC 輸入:wq。最后回車,這樣沖突就解決了。

總結(jié):當(dāng)合并分支發(fā)生沖突的時候,有兩種解決方式:1.手動解決沖突,看哪些代碼需要留下,哪些代碼需要刪除。這種方式的前提是你知道哪些代碼需要合并。2.忽略合并,當(dāng)前代碼不知道哪些需要留下,哪些需要刪掉的時候,就是用--abort方法。
通過命令查看版本線圖
git log --graph
git log --oneline --graph? ??
git log --oneline --graph --all? ? 查看所有分支下的線圖
git log --oneline --graph -[number]? ??
快轉(zhuǎn)機制的意義
快轉(zhuǎn)實際就是當(dāng)前master的將來時
git merge branchname --no-ff? ?
更多合并的方法
git merge --no-ff --no-commit [branchname]
git merge --squash [branchname]????不想在合并分支時體現(xiàn)你多次commit記錄的話,就用這個方法
git reset --hard ORIG_HEAD? ????????回退到源版本,也就是最初的版本
一次性刪掉所有不想要的分支
git branch --merged i egrep -v "(^|maseter|develop)" | xargs git branch -d ????????括號里代表不想刪的分支
今天先記錄這么多,過兩天補充跟遠端有關(guān)的筆記。
補充一下?
如何合并分支中的部分提交?
1.首先查看需要合并的分支中提交的hash號
2.切換到主分支, 使用? git cherry-pick hash號 (這個hash號是分支中提交的hash號)
3.然后就ok了