1.安裝git
$ sudo apt-get install git
$ git config --global user.name "your name"
$ git config --global user.email "[email protected]" --global引數表示這台機器上所有的git倉庫都會使用這個配置
2.建立版本庫repository(乙個使用git進行管理的目錄)
$ mkdir learngit & cd learngit
$ git init (使用ls -ah檢視隱藏檔案.git)
3.新增檔案到倉庫
$ git add
$ git commit -m
4.檢視倉庫當前的狀態
$ git status 如果git status告訴你檔案被修改過,可以檢視具體的修改內容 $ git diff,只能在修改檔案這一步後檢視
第一次添的加檔案且沒有進行提交過:untracked files(並且用git diff檢視不到)
修改完檔案:no changes added to commit (use "git add" and/or "git commit -a")
執行完add:changes to be committed
執行完commit:nothing to commit, working directory clean
5.檢視最近到最遠的提交日誌
$ git log --pretty=oneline 其中一大串的數字是git的版本號(commit id)
6.版本回退
head表示當前版本,head^表示上乙個版本,head^^表示上上個版本,head~100表示往上100個版本
$ git reset --hard head^ 退回上乙個版本 $ cat readme.txt檢視檔案內容 $ echo 'abc'>>readme.txt新建簡單的文字
$ git reset --hard 1094a 回到未來的commit id為1094a的版本
$ git reflog 記錄每一次的命令(如果想回到未來的版本但是找不到版本號);重回過去,用 $ git log檢視提交歷史,確定要回退到哪個版本,重返未來,用$ git reflog檢視歷史命令,確定要回到未來的版本
git的版本回退速度很快,是因為git內部有個指向當前版本的head指標,當回退版本的時候,git僅僅把head指向回退的版本
7.工作區(working directory):learngit資料夾版本庫(repository):.git目錄
git的版本庫里最重要的是稱為stage(index)的暫存區,還有git自動為我們建立的第乙個分支master,以及指向master的指標head
暫存區與版本庫的區別:第一次修改 -> git add -> 第二次修改 -> git commit。當你用git add命令後,在工作區的第一次修改被放入暫存區,準備提交,但是,在工作區的第二次修改並沒有放入暫存區,所以,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交
8.檢視工作區和版本庫里最新版本的區別
$ git diff head -- readme.txt
9.git checkout命令
命令$ git checkout -- readme.txt意思就是,把readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況:一種是readme.txt修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;一種是readme.txt已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。總之,就是讓這個檔案回到最近一次git commit或git add時的狀態
10.git reset命令
命令$ git reset head readme.txt可以把暫存區的修改撤銷掉,重新放回工作區,再用$ git checkout -- readme.txt命令丟棄工作區的修改
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head ,就回到了場景1,第二步按場景1操作
11.從版本庫中刪除該檔案rm ***
刪對了,那就用命令git rm刪掉,並且使用git commit;刪錯了,可以很輕鬆地把誤刪的檔案恢復到最新版本:$ git checkout -- test.txt,但是如果執行git rm ***刪除檔案用checkout就找不回了
12.新增遠端倉庫
(1)建立ssh key,cd到使用者主目錄的.ss**件夾下,檢視有沒有id_rsa(私鑰)和id_rsa.pub(公鑰),有的話直接跳過,沒有的話$ ssh-keygen -t rsa -c "email address",然後一路使用預設值
(2)在github的ssh key選項中新增id_rsa.pub中的內容
(3)在github上面建立repository(建立乙個新的git倉庫)
(4)在本地關聯倉庫中輸入git remote add origin 用來關聯遠端庫,遠端庫的名字就叫origin。關聯後,使用命令git push -u origin master第一次推送master分支的所有內容;此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改
13.轉殖遠端庫
$ git clone
14.git建立分支
head指向當前分支,master指向最新提交的分支
$ git checkout -b dev 建立並轉換分支(相當於建立分支$ git branch dev & 切換分支$ git checkout dev),接下來在分支上進行操作後使用$git add & $ git commit提交給分支
$ git branch 檢視當前分支
$ git checkout master 返回master分支
$ git merge dev 將dev分支的工作合併到master上(fast-forward)
$ git branch -d dev 刪除dev分支
$ git branch -d 強力刪除沒有合併的branch
衝突解決:在分支上修改檔案並執行git add和git commit後,切換到master,在master上修改檔案並執行git add和git commit後,執行merge時會發生衝突。在master分支中使用git status檢視衝突的檔案,檢視並修改衝突的檔案後,重新使用git add和git commit提交,最後刪除剛才操作的分支
命令$ git log --graph --pretty=oneline --abbrev-commit檢視分支的合併情況
$ git merge --no-ff -m "merge with no-ff" dev 不使用fast forward模式合併,保留分支的資訊。使用ff模式只會顯示最終的修改結果,不保留分支資訊
15.分支管理原則
master只發布穩定的新版本,在dev上面幹活,每個人擁有自己的分支,不斷地向dev分支上合併就可以了。新增新功能時,不希望實驗性質的**搞亂主分支,因此新增的新功能最好在feature分支上開發、合併,最後刪除feature分支。
16.bug分支
修復bug可以通過新建臨時分支(issue-number),修復後合併分支,然後刪除臨時分支
如果是未曾提交過的檔案,需要通過命令$ git add ***將未儲存的檔案提交到暫存區,讓git能夠追蹤這個檔案
$ git stash 將工作現場出藏起來等恢復現場後繼續工作(當前在dev分支)
$ git checkout master 切換回master
$ git checkout -b issue-101
修復完bug後通過命令$ git add & $ git commit命令提交,然後切換回master分支,通過命令 $ git merge --no-ff -m 'merged bug fix 101' issue-101,最後刪除分支
$ git checkout dev 切換回dev分支
$ git stash list 檢視剛才的工作現場
方法二:$ git stash pop 恢復的同時刪除了stash內容
《廖雪峰 Git 教程》學習總結
基本上,git就是以下面的命令順序學習的。文中筆記是從廖雪峰老師的 git教程 中總結出來的,方面查閱命令。找回刪除的檔案 git reset head filename1撤銷add,回到工作區 git rm filename1刪除檔案 git remote add origin將本地庫關聯到git...
廖雪峰Git教程學習筆記
git1 通過git init命令把這個目錄變成git可以管理的倉庫 git init 2 用命令git add告訴git,把檔案新增到倉庫 git add readme.txt 3 用命令git commit告訴git,把檔案提交到倉庫 git commit m 這是備註 4 已經記不清上次怎麼修...
廖雪峰git教程學習筆記
對git來說,沒有訊息就是最好的訊息 使用 git init 把當前目錄變為git倉庫 要在倉庫裡加入檔案,先在倉庫目錄新建這個檔案後,比如新建乙個檔案xiaobai.txt,內容為 在命令列裡輸入 git status,出現提示xiaobai為untracked file,即沒有加入倉庫 git的...