1.創(chuàng)建版本庫
? ?$ mkdir resname
? ? $ cd resname
? ? 此時文件夾里只有$ git init
? ? .git一個文件夾,不要隨意改動。
2.文本添加到版本庫
? ? 編輯文本文件,推薦使用notepad++,設(shè)置成UTF-8 without BOM
? ? 首先創(chuàng)建文件保存在文件中,
? ? 然后添加到倉庫$ add filename
? ? 再然后提交到倉庫$ git commit -m”本次改動的簡述”
? ? 注:可以add多個文件,一次commit提交
3.查看
? ? $ git status查看當前文件修改和提交的狀態(tài)
? ? $ git diff filename查看文件具體修改的內(nèi)容
? ? $ git log查看提交日志(由近及遠)
? ? $ git log --pretty oneline上一命令的簡化
? ? $ git reflog查看歷史命令
? ? $ git diff HEAD -- filename查看工作區(qū)和版本庫里面最新版本的區(qū)別
4.版本回退
? ? $ git reset --hard HEAD^
? ? 可以直接寫版本號的前6位。$ git reset --hard commit_id
? ? 不知道本電腦為啥head^這個不好用,但是id還是好用的
5.工作區(qū)和暫存區(qū)
? ? 修改過后的文件先add到暫存區(qū),在提交到master分支。
7.撤銷修改
? ? 文件已修改但是沒有add
? ? $ git checkout -- filename
? ? 文件修改并add到暫存區(qū)
? ? $ git reset HEAD file
? ? $ git checkout -- filename
8.刪除文件
? ? $ git rm filename
? ? 如果刪錯了
? ? $ git checkout -- filename用版本庫里的文件代替工作區(qū)的文件
9.遠程倉庫
? ? 首先打開Git Bash,創(chuàng)建SSH Key
? ? $ ssh-keygen -t rsa -C“你自己的郵箱”。一路回車默認
? ? 然后,打開Github -> Personal settings->SSH and GPG keys->new SSH Key
? ? title自己定義,key復(fù)制用戶主目錄下的admin/.ssh/id-rsa.pub
? ? 再然后Add SSH Key
? ? 然后創(chuàng)建一個新的倉庫,new repository
? ? 關(guān)聯(lián)遠程倉庫
? ? ? ? $ git remote add origingit@github.com:zdning/learngit.git
? ? 將當前分支master推送到遠程庫
? ? ? ? $ git push -u origin master首次加-u,以后可以省略
GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協(xié)議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。
10.克隆倉庫
先創(chuàng)建遠程庫,再克隆到本地
? ? 創(chuàng)建完成之后進行克隆
? ? ? ? $ git clone git clone git@github.com:zdning/gitskills.git
? ? 使用https協(xié)議速度慢,每次輸入都必須輸入口令,
11.分支管理
? ? HEAD指向工作區(qū),master指向要提交的區(qū)。
? ? 首先創(chuàng)建分支$ git branch devname
? ? 切換分支$ git checkout ?devname
? ? 創(chuàng)建并切換分支$ git checkout -b devname
? ? 查看當前分支$ git branch
? ? 當前分支前面有*標識
? ? 切換回master分支$ git checkout master
? ? 合并分支$ git merge devname
? ? 刪除分支$ git branch -d devname
12.解決沖突
? ? 沖突發(fā)生,會直接在文檔里顯示出來,需要手動修改之后提交
? ? ? ? $ git log --graph --pretty=oneline --abbrev-commit查看合并情況
? ? ? ? $ git log --graph可以查看分支合并圖
13.分支管理策略
? ? ? ? master相當于正式庫,一般情況下不能直接在master上工作,一般都在分支dev上工作,所有人的代碼也都往dev上合并,dev是不穩(wěn)定的,是測試庫
14.Bug分支
? ? ? ? 意思就是,我手里還有任務(wù)沒做完,boss說有個bug要我改,可是,我手里的任務(wù)沒做完,又不能提交,我就得先把沒提交的代碼保存起來,新建一個修復(fù)Bug的分支。
? ? ? ? 保存未提交的代碼$ git stash
? ? ? ? 在哪個分支修復(fù),就切換到哪個分支臨時創(chuàng)建分支。
? ? ? ? ? ? $ git checkout-b issue-101
? ? ? ?修改后提交,切換到主分支,合并,刪除臨時分支
? ? 恢復(fù)到上一個開發(fā)現(xiàn)場
? ? 查看$ git stash list
? ? 恢復(fù)$ git stash pop同時刪除了stash
14.Feature分支
? ? 準備合并的時候,銷毀臨時分支$ git branch -d feature
? ? 強行刪除$ git branch -D feature
15.多人協(xié)作
? ? 查看遠程庫信息$ git remote -v
? ? 推送分支$ git push origin master一般只推送master/dev
? ? 本地dev與遠程dev連接$ git branch --set-upstream dev origin/dev
? ? 拉取最新的提交$ git pull
? ? 本地合并修改,在進行添加、提交、推送$ git push origin dev
16.標簽管理
? ? 自定義標簽名來代替復(fù)雜的commit-id
? ? 切換到需要打標簽的分支上$ git tag v2.1
? ? 查看標簽$ git tag
? ? 命令git push origin 可以推送一個本地標簽;
? ? 命令git push origin --tags可以推送全部未推送過的本地標簽;
? ? 命令git tag -d 可以刪除一個本地標簽;
? ? 命令git push origin :refs/tags/可以刪除一個遠程標簽。