GitHub是最先進的分布式版本控制工具,下面是我學習中總結的操作流程,僅供參考
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Git安裝
?????????????????? 下載git的windows版本并安裝,不予詳述(直接打開安裝包,按默認的流程一步步進行即可,任意位置點擊鼠標右鍵彈出git 字樣的選項時即為安裝成功)
?????????????????? 安裝成功后輸入下面命令進行設置
??????????????????????????? $ git config --global user.name "你的git賬號"
$ git config --global user.email "你注冊git賬號的郵箱"
Git操作:
?????????????????? ?創建版本庫
- 選擇一個地方創建空目錄(所有目錄名必須是英文的,中文的會出bug)
- 輸入下列命令
$ mkdir learngit //learngit為倉庫名,可以自己命名
$ cd learngit
$ pwd????? //顯示當前目錄
??????????????????????????? $ git init? //將目錄變為git管理的倉庫
- 添加文件,在learngit文件夾下創建文件,輸入下列命令
$ git add 文件名????? //文件名是創建文件的名字
$ git commit -m "注釋"//-m后面提交的是文檔說明,這個必須要有,否則報錯
?????????????????? 修改版本庫:
- 查看倉庫狀態:
$ git status
- 查看修改內容:
$ git diff 文件名
- 查看歷次版本歷史紀錄
$ git log
- 回退上次版本
$ git reset --hard HEAD^
- 回退到任意一個版本
$ git reset --hard num //num 為要回退到某個版本的版本號,部分即可
- 查詢歷史命令
$ git reflog
- 查詢工作區和版本庫里面的最新版本的區別
$ git diff HEAD -- 文件名 //要查詢文件的名字
- 放棄工作區文件的修改(此命令中的兩個橫杠很重要,不能少寫)
$ git checkout -- 文件名 //放棄修改的文件名稱
- 撤銷暫存區文件的修改
$ git reset HEAD 文件名
Git工作時候實際上是工作區->暫存區(stage)->分支(master為git自動創建的分支),HEAD為指向master 的一個指針。Git add實際上是將文件提交到了暫存區。Git commit是將暫存區的所有內容都提交到分支,可以先執行多個add,
再使用一個commit提交。
?????????????????? 如果直接將文件管理器中的文件刪除或者使用rm命令刪除,工作區和版本庫的內容就會不一致,此時:
- 可以選擇直接從版本庫中刪除文件
$ git rm 文件名
$ git commit
- 文件刪除錯誤,這時可以從版本庫里還原文件
$ git checkout -- 文件名
連接git網站:
- 創建SSH Key,在user目錄下(用戶主目錄),查看是否有.SSH文件,并且查看其下面有無id_rsa(私鑰,不能告訴別人)和id_rsa.pub(公鑰,可以告訴別人)文件,如果沒有可以運行命令創建
$ ssh-keygen -t rsa -C "郵箱名"
- 登陸GitHub網站,打開“SSH Key”頁面,點擊“new SSH”,輸入任意名,粘貼公鑰內容
有本地庫后創建遠程庫:
- 登陸網站,點擊“create a new repository”,創建新庫,設置名稱learngit,點擊創建
- 將本地內容關聯到遠程庫里面去
$ git remote add origin git@github.com:賬戶名/learngit.git
- 把本地庫的內容推送到遠程庫上,
$ git push -u origin master
第一次推送時使用-u參數關聯,后面推送時候就可以簡化命令$ git push origin master
從遠程庫克隆庫
- 登陸網站,假設已經創建了一個庫gitskill
- 克隆庫到本地
$ git clone git@github.com:賬戶名gitskill.git
$cd gitskill?????? //創建本地文件夾
$ls
創建與刪除分支:
- 創建另一個分支dev,并將指針HEAD切換到另一個分支上去
$git checkout -b dev? //dev為另一個分支名,記住中間是一個橫杠
-b表示創建并切換
- 查看所有分支
???????? ?????????????????? $ git brach
- 切換分支
$ git checkout master//切換回master分支
- 合并分支
$ git merge dev? //將dev分支合并到當前分支上來
- 刪除分支
$ git branch -d dev? //刪除dev分支
分支沖突:
?????????????????? 當創建一個新分支并且做出修改后回到原分支再次修改文件,此時git無法將兩個修改的文件進行快速合并,必須將某一個文件修改后或使其完全一致方可。查看分支合并情況:
??????????????????????????? $ git log --graph --pretty=oneline --abbrev-commit? //查看沖突分支的合并情況
No-ff模式(禁用fast forward模式)
??????????????????????????? Fast forward模式下合并分支會丟失分支信息,禁止后在執行合并分支操作時能從分支歷史上看到分支信息。 禁用模式下執行合并命令:
??????????????????????????? $ git merge? --no-ff -m "注釋"
儲存工作狀態:
?????????????????? 在處理bug等必須暫時離開時,可以保存現在的工作狀態
- 儲存當前工作狀態:
$ git stash?? //存儲當前分支
- 修復bug(假如在master中修復bug)
$ git checkout master??? // 轉到master分支
$ git checkout –b issue-101?? //創建新的分支issue-101來修復bug
- 修復完成后:
$ git checkout master?? //切換回master
$ git merge –no-ff –m “注釋” issue-101 //修改完bug的分支合并到master中去,并保留痕跡
$ git branch –d issue-101?? //刪除臨時分支
??????????????????????????? 4.切換回原來的工作狀態
???????????????????????????????????? $ git checkout dev
此時工作區是沒有東西的,原來的stash內容被存在別的地方,可以用$ git stash list來查看。此時工作現場還在,此時可以執行:
?????? $ git stash apply?? // 恢復存儲內容
?????? $ git stash drop??? // 刪除儲存的工作狀態文件
或者一次恢復并刪除工作狀態文件:
?????? $git stash pop
刪除分支:
當分支創建完畢即將合并時,突然不使用這個分支了,要將其刪除。此時使用強行刪除命令(此時沒有合并,不能使用git branch來刪除分支):
??????????????????????????? $ git branch –D feature?? //feature 是要刪除的分支名字
多人協作:
- 查看遠程庫的信息
$ git remote????
或者使用命令
$ git remove –v ???//查看遠程庫更詳細的內容
- 推送分支到公共庫
$ git push origin 分支名?? // origin是遠程庫的默認名稱
注意:
l? Master 是主分支,需要時刻與遠程庫同步
l? Dev為開發分支,也需要同步
l? Bug 分支只用于本地修復bug,沒必要推送
l? Feature 是新功能開發分支,這個取決于是否與他人合作開發
- 抓取分支,當開發者同時更新dev分支時,可以先抓取這個分支到本地,解決沖突后再上傳
$ git branch –set-upstream dev origin/dev? //指定本地和遠程庫dev文件的鏈接
$ git pull????????????????? //抓取網上的dev文件
創建標簽:
??????????????????????????? 為每一個分支創建一個版本號:
?????????????????????????????????????????????? $ git branch??? //查看分支
?????????????????????????????????????????????? $ git checkout master?? //轉到需要加版本號的標簽
?????????????????????????????????????????????? $ git tag v1.0??? //為分支創建版本號標簽,v1.0為版本號
?????????????????????????????????????????????? $ git tag????? //查看所有版本號標簽
?????????????????????????????????????????????? $ git show tag??? //查看所有版本號標簽的詳細信息
創建帶有說明的標簽:
?????????????????? $ git tag –a 版本號? -m “說明文字“
看版本號的說明文字
?????????????????? $ git show 版本號?
操作標簽:
???????? ?刪除標簽:
???????????????????????????????????? $ git tag –d 版本號
???????? 推送標簽到遠程:
???????????????????????????????????? $ git push origin 版本號
???????? 推送所有標簽名到遠程:
???????????????????????????????????? $ git push origin –tags
???????? 如果標簽已經推送到遠程,可以先刪除本地的,再 刪除遠程的
???????????????????????????????????? $ git tag –d 版本號? //? 刪除本地的
???????????????????????????????????? $ git push origin :refs/tags/版本號