記錄一下git常用操作
設(shè)置user的name和email
- 設(shè)置name:
$ git config --global user.name "YourUserName" - 設(shè)置email:
git config --global user.email "YourUserName@email.com"
生成ssh秘鑰
- 進(jìn)入.ssh文件夾:
cd ~/.ssh - 生成秘鑰:
$ ssh-keygen -t rsa -C “YourUserName@email.com”, 連按三個(gè)回車,密碼這會(huì)設(shè)置為空 - 創(chuàng)建秘鑰后會(huì)生成兩個(gè)文件id_rsa和id_rsa.pub,將*.pub文件打開并且復(fù)制內(nèi)容到github或者gitlab的ssh配置上
獲取遠(yuǎn)程倉(cāng)庫(kù)源碼
- 獲取本機(jī)上的遠(yuǎn)程代碼
- 指定文件:
git init - 輸出當(dāng)前文件夾路徑并復(fù)制在粘貼板:
pwd | pbcopy(pbcopy是oxs系統(tǒng)命令) - 在此倉(cāng)庫(kù)外的文件夾克隆:
git clone repositoryUrl
- 指定文件:
- 獲取github或gitlab上的代碼:
git clone https://github.com/Zooc/androidzoo.git
各種常用操作
- 分支操作
- 瀏覽所有分支,包含線上的:
git branch -a, 沒有-a這只瀏覽本地所有分支 - 從本地創(chuàng)建分支:
git branch kenny - 創(chuàng)建遠(yuǎn)程分支,在kenny分支下,進(jìn)行推送:
git push origin kenny - 刪除本地分支:
git branch -D kenny - 刪除遠(yuǎn)程分支:
git push origin :kenny
- 瀏覽所有分支,包含線上的:
- 切換操作
- 切換分支:
git checkout kenny,如果該分支是本地沒有,而線上有的話,那么本地分支和線上分支會(huì)有聯(lián)系,例如如果本地比對(duì)應(yīng)的遠(yuǎn)程分支多幾個(gè)commit,使用git status會(huì)有提示可以推送。 - 切換到某個(gè)tag,并建立新分支:
git checkout -b new_branch_name tag_name。更多切換操作
- 切換分支:
- 添加操作
- 添加當(dāng)前所有文件:
git add . - 添加所有:
git addd -A
- 添加當(dāng)前所有文件:
- 提交操作
- 向本地倉(cāng)庫(kù)提交:
git commit -m "commit info description" - 修改commit信息:
git commit --amend
- 向本地倉(cāng)庫(kù)提交:
- 融合操作
- 融合開發(fā)分支:
git merge develop
- 融合開發(fā)分支:
- 推送操作
- 向?qū)?yīng)的分支推送:
git push origin kenny
- 向?qū)?yīng)的分支推送:
- 拉取操作
- 從對(duì)應(yīng)的分支拉取:
git pull origin kenny
- 從對(duì)應(yīng)的分支拉取:
- 回滾操作
- 回滾到commit-id(將commit-id之后提交的commit都去除):
git reset --hard commit-id - 將最近n次的提交回滾:
git reset --hard HEAD~n - 遠(yuǎn)程代碼回滾:
- 拉取遠(yuǎn)程代碼:
git checkout kenny - 本地回滾:
git reset --hard theCommitId - 刪除遠(yuǎn)程分支:
git push origin :kenny - 重新push本地分支:
git push origin kenny
- 拉取遠(yuǎn)程代碼:
- 回滾到commit-id(將commit-id之后提交的commit都去除):
- 暫存操作:
- 暫存當(dāng)前狀態(tài)(不建議,最好加上命名):
git stash - 暫存命名:
git stash save "kenny status" - 查詢暫存列表:
git stash list - 彈出暫存列表最上面的一個(gè)狀態(tài):
git stash pop - 清除暫存:
git stash clear - 恢復(fù)指定角標(biāo)的暫存,可以多次恢復(fù):
git stash apply stash@{0} -
查看緩存時(shí)間:
git stash list --date=relativegit stash list --date= shortgit stash list --date= local
- 暫存當(dāng)前狀態(tài)(不建議,最好加上命名):
- 查詢操作
- 查看log:
git log --graph --decorate --pretty=oneline --abbrev-commit - 查看最近一次修改的內(nèi)容:
git log -n 1 --stat - 查看本地所有的提交記錄:
git reflog - 查看git別名:
git config --list | grep alias - 取消別名:
git config --global --unset alias.br
- 查看log:
- 標(biāo)簽操作
- 打標(biāo)簽:
git tag -a V100 -m "Release version 1.0.0" - 以某個(gè)commit id為標(biāo)記打標(biāo)簽:
git tag -a V100 commit_id -m "Release version 1.0.0" - 提交標(biāo)簽到遠(yuǎn)程服務(wù)器:
git push origin --tags - 刪除標(biāo)簽:
git tag -d V100 - 刪除遠(yuǎn)端服務(wù)器的標(biāo)簽:
git push origin :refs/tags/V100 - 查看tag 及其注釋:
git tag -l -n
- 打標(biāo)簽:
其他操作
- Github fork 項(xiàng)目后代碼同步
- 首先將自己的fork的項(xiàng)目clone到本地:
git clone https://github.com/kenny/kgit.git - 在自己的項(xiàng)目里面,添加一個(gè)遠(yuǎn)程連接到本地,命名為
kgit:git remote add kgit https://github.com/kenny/kgit.git - 從遠(yuǎn)程分支拉去代碼到本地(master可以替換為其他分支名稱,因?yàn)橛行╉?xiàng)目master是沒有代碼的):
git pull kgit master - 推送到自己的庫(kù)里面:
git push
- 首先將自己的fork的項(xiàng)目clone到本地:
- 清除掉已提交但是需要忽略的文件,對(duì)于文件夾,第一個(gè)命令還需要再文件夾前增加 -r 參數(shù):
git rm --cached logs/xx.log- 更新 .gitignore 忽略掉目標(biāo)文件
git commit -m "We really don't want Git to track this anymore!"
- 查看遠(yuǎn)程倉(cāng)庫(kù)地址:
git remote -v
其他
- 全局設(shè)置
- 將crlf的提示信息關(guān)閉:
git config --global core.autocrlf false
- 將crlf的提示信息關(guān)閉:
- 設(shè)置別名
git config --global alias.cm commitgit config --global alias.br branchgit config --global alias.co checkoutgit config --global alias.lg "log --pretty=oneline --abbrev-commit"git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) &C(bold blue)<%an>%Creset' --abbrev-commit"
- 同時(shí)管理多個(gè)ssh私鑰
常見問題
- 當(dāng)出現(xiàn)
HEAD detached at ******時(shí),表明你已經(jīng)不再任何一個(gè)分支上了,如果想要重回某個(gè)分支,需要再checkout一次,git checkout master。Fix a Git detached head? - 切換錯(cuò)誤分支了,而且是一個(gè)非常久的分支,并且在切換到一半的過程中撤銷了,從而導(dǎo)致刪除了部分jar,出現(xiàn)了以下錯(cuò)誤(做任何其他操作時(shí)):
/.git/index.lock': File exists.- 刪除掉 index.lock文件,以便可以做其他操作:
rm -f ./.git/index.lock - 恢復(fù)提交前的文件狀態(tài):
git checkout .
- 刪除掉 index.lock文件,以便可以做其他操作:
- 修復(fù)Mac下命令行Git無(wú)法在vi中commit的錯(cuò)誤-- here was a problem with the editor 'vi'.
- windows下的中文亂碼問題解決辦法:Windows下Git Bash中文亂碼
應(yīng)用
一個(gè)項(xiàng)目push到多個(gè)遠(yuǎn)程Git倉(cāng)庫(kù) - 個(gè)人文章 - SegmentFault 思否