Git的簡介:
Git是目前世界上最先進的分佈式版本控制系統。區別於集中式svn和cvs,分佈式版本控制系統沒有“中央服務器”,每個人的電腦上都是一個完整的版本庫。特點:不需要聯網、安全性高、速度快、協作更便捷。
一、創建版本庫:
mkdir learngit 新建一個目錄
cd learngit 跳轉到這個目錄下git init 把這個目錄變成Git可以管理的倉庫
編寫readme.txt文件放在learngit目錄
git add readme.txt 把文件添加到倉庫
git commit -m "wrote a readme file" 告訴Git,把文件提交到倉庫
git status 命令看倉庫當前的狀態
git diff readme.txt 看具體修改內容
總結:
隨時掌握工作區的狀態,使用git status命令。
如果git status告訴你有文件被修改過,用git diff可以查看修改內容。
二、版本回退和管理修改
git log --pretty=oneline 簡化記錄顯示
一大串類似3628164...882e1e0的是commit id(版本號)
用HEAD表示當前版本
上一個版本就是HEAD^,上上一個版本就是HEAD^^,
當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
git reset --hard HEAD^ 回退上一版本
git reset --hard (commit id)(版本號)
cat readme.txt 顯示內容
忘記commit id可用relog查
git reflog 用來記錄你的每一次命令
git diff HEAD -- readme.txt 命令可以查看工作區和版本庫裏面最新版本的區別
總結:
每次修改,如果不add到暫存區,那就不會加入到commit中
三、撤銷修改和刪除文件
git reset HEAD file 可以把暫存區的修改撤銷掉(unstage),重新放回工作區
總結:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
git rm 用於刪除一個文件
ls -ah 查看隱藏目錄
ssh-keygen -t rsa -C "[email protected]" 創建SSH Key,一路回車
成功後,可以在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件
id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人
https://github.com/settings/keys 谷歌瀏覽器打開
在這個網站中添加SSH keys 用id_rsa.pub公鑰。
使用SSH Key是因爲GitHub需要識別出你推送的提交確實是你推送的
本地倉庫關聯遠程庫heshushun/learngit.git,遠程庫的名稱:origin
git remote add origin [email protected]:heshushun/learngit.git
把本地庫的所有內容推送到遠程庫上
git push -u origin master 把當前分支master推送到遠程,並將本地master和遠程master關聯
git push origin master 後面推送遠程不需要再加-u
從遠程庫克隆到本地庫
git clone [email protected]:heshushun/gitskills.git
git checkout -b dev 創建dev分支,然後切換到dev分支
git checkout命令加上-b參數表示創建並切換
git branch 命令查看當前分支
git checkout master 切換回master分支
git merge dev 把dev分支的工作成果合併到master分支上
git branch -d dev 刪除dev分支
因爲創建、合併和刪除分支非常快,所以Git鼓勵使用分支完成某個任務,合併後再刪掉分支
總結:
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
git log --graph 命令可以看到分支合併圖。
git stash 可以把當前工作現場“儲藏”起來
git merge --no-ff -m "merged bug fix 101" issue-101 合併
git stash list 命令查看剛纔的工作現場
git stash apply恢復 但是恢復後,stash內容並不刪除
git stash pop 恢復工作現場的同時把stash內容也刪了
git branch -D feature-vulcan 強行刪除分支 -D
git branch -d feature-vulcan 如果分支修改沒有合併是不能刪除的
git remote 查看遠程庫的信息 git remote -v 看更詳細
git push origin dev 推送 dev分支
git checkout -b dev origin/dev 其他本地倉庫想再dev上開發,需創建遠程origin的dev分支到本地
git commit -m "add /usr/bin/env"
git push origin dev 修改後 push到遠程
若對方提交,你也提交同文件會衝突,會推送失敗。
可先用git pull把最新的提交從origin/dev抓下來,然後,在本地合併,解決衝突,再推送
git pull 將origin/dev抓下來
如果失敗,因爲沒有指定本地dev分支與遠程origin/dev分支的鏈接
git branch --set-upstream dev origin/dev 設置dev和origin/dev的鏈接:
然後再pull,本地合併解決衝突後,再push
git tag v1.0 新建標籤v1.0
git log --pretty=oneline --abbrev-commit 找歷史提交的commit id
git tag v0.9 692fdc3 指定 692fdc3 commit id 的標籤是v0.9
git show v0.9 查看標籤信息
git tag -d v0.9 刪除標籤
git push origin v1.0 推送某個標籤到遠程
git push origin :refs/tags/v0.9 刪除一個遠程標籤