Git的使用

$ git config –global user.name “Your Name”
$ git config –global user.email “[email protected]


pwd //版本倉庫的位置
ls //當前目錄的所有文件 ls -ah可看到隱藏文件
mkdir //創建新目錄

$ git init //把這個目錄變成Git可以管理的倉庫

//在倉庫內新建文件readme.txt
$ git add readme.txt //將文件添加到倉庫中
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m “add 3 files.” //把文件提交到倉庫 -m後面輸入的是本次提交的說明

/**
如果不小心輸成了$ git commit 則 :wq 回車
**/

$ git status //命令可以讓我們時刻掌握倉庫當前的狀態
$ git diff readme.txt //能看看具體修改了什麼內容

$ git log //命令可以告訴我們歷史記錄
$ git log –pretty=oneline //一條歷史記錄顯示在一行

$ git reset –hard HEAD^ //回退到上一個版本上一個版本就是HEAD^,上上一個版本就是 HEAD^^,版本過多HEAD~100

$ git reset –hard 3628164 //根據commit id指定回到未來的某個版本
$ git reflog //用來記錄你的每一次命令 含有commit id

工作區 版本庫 暫存區(Stage)
工作區:git init的那個目錄。
版本庫:目錄下.git文件夾。
暫存區:執行add命令後 未commit時文件的位置。 而commit命令就是把暫存區的文件提交

$ git checkout – readme.txt //必須是commit後修改,或者add後修改 //修改包括刪除
命令git checkout – readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這裏有兩種情況:
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

$ rm test.txt //從文件夾刪除文件
第一種情況:確實要從版本庫中刪除該文件
$ git rm test.txt //從版本庫中刪除該文件
$ git commit -m “remove test.txt”

第二種情況:恢復該文件
$ git checkout – test.txt

github的使用
1.創建SSH Key $ ssh-keygen -t rsa -C “[email protected]
2.在github中添加SSH key
3.在github中Create a new repo
4.把一個已有的本地倉庫與之關聯 $ git remote add origin [email protected]:michaelliao/learngit.git
注意:此時github中repo必須爲空,如果不爲空則會報錯failed to push some refs to git
此時可以 $ git pull –rebase origin master合併
5.把本地庫的所有內容推送到遠程庫上 $ git push -u origin master

由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令
$ git push origin master

$ git clone [email protected]:michaelliao/gitskills.git 上次我們講了先有本地庫,後有遠程庫的時候,如何關聯遠程庫。現在,假設我們從零開發,那麼最好的方式是先創建遠程庫,然後,從遠程庫克隆。

$ git checkout -b dev //創建dev分支,然後切換到dev分支

git checkout命令加上-b參數表示創建並切換,相當於以下兩條命令
$ git branch dev
$ git checkout dev

$ git branch //查看當前分支
$ git merge dev //合併到master分支上
$ git branch -d dev //刪除dev分支
$ git branch -D dev //分支沒合併時強制刪除分支

解決衝突:有衝突的時候可以用status看到, 可以手動解決。
$ git log –graph –pretty=oneline –abbrev-commit 以圖形的方式展現

通常,合併分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。
如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
$ git merge –no-ff -m “merge with no-ff” dev

bug分支:軟件開發中,bug就像家常便飯一樣。有了bug就需要修復,在Git中,由於分支是如此的強大,所以,每個bug都可以 通過一個新的臨時分支來修復,修復後,合併分支,然後將臨時分支刪除。

當你接到一個修復一個代號101的bug的任務時,很自然地,你想創建一個分支issue-101來修復它,但是,等等,當前 正在dev上進行的工作還沒有提交。
Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作:
$ git stash 加入的順序是從0開始往後移位,類似於棧
$ git stash list

$ git stash apply 恢復後,stash內容並不刪除
$ git stash drop 刪除
$ git stash pop 恢復的同時把stash內容也刪了

多人協作:
$ git remote 查看遠程庫的信息,遠程倉庫的默認名稱是origin
$ git remote -v 顯示更詳細的信息
$ git push origin master 推送分支
$ git push origin dev

$ git clone [email protected]:michaelliao/learngit.git
$ git checkout -b dev origin/dev //創建遠程origin的dev分支到本地
$ git commit -m “add /usr/bin/env”
$ git push origin dev //發生衝突時

推送失敗,因爲你的小夥伴的最新提交和你試圖推送的提交有衝突,解決辦法也很簡單,Git已經提示我們,先用git pull把最新的提交從origin/dev抓下來,然後,在本地合併,解決衝突,再推送

git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置dev和origin/dev的鏈接
$ git branch –set-upstream dev origin/dev
$ git pull

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章