Git簡明教程

2021-10-25 08:52:42 字數 4696 閱讀 6983

因為搭建部落格的時候,用到了git,但實際上自己對git還是一知半解。所以看了比較易懂的廖雪峰老師的git教程,順便做個筆記總結,方便之後查詢。

git是最流行的分布式版本控制系統,簡單來說,就是管理不同人員對文字的修改記錄,達到協同編輯的目的。

版本庫(repository)又名倉庫,可以簡單理解成乙個目錄,git負責跟蹤每個檔案的修改刪除,並儲存修改歷史。

建立乙個空目錄(gui操作也可以)

$ mkdir learngit

$ cd learngit

$ pwd

/users/michael/learngit

初始化乙個git倉庫

使用git init命令

新增檔案到git倉庫,分兩步:

使用命令git add,注意,可反覆多次使用,新增多個檔案;

使用命令git commit -m,完成。

git status命令可以讓我們時刻掌握倉庫當前的狀態,如:是否修改

git diff命令可以檢視修改內容

head指向的版本就是當前版本,因此,git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。commit_id就是版本號,並且不必寫全,git會自動填全。

穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本,可以加上--pretty=oneline引數簡化輸出資訊,得到的每一行開頭的字元,是版本號。

要重返未來,用git reflog檢視命令歷史,以便確定要回到未來的哪個版本。

git add把檔案新增進去,實際上就是把檔案修改新增到暫存區(stage);

git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支(master)。

注:只有使用git add,將修改放到暫存區,使用git commit才有作用。

而協同編輯中還要引入遠端庫的概念,在此之前提到的所有操作都是在本地進行。

場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。讓這個檔案回到最近一次git commitgit add時的狀態

場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head,就回到了場景1,第二步按場景1操作。

命令git rm用於刪除乙個檔案。如果乙個檔案已經被提交到版本庫,那麼你永遠不用擔心誤刪,但是要小心,你只能恢復檔案到最新版本,你會丟失最近一次提交後你修改的內容(git checkout其實是用版本庫里的版本替換工作區的版本)

git remote add origin [email protected]:michaelliao/learngit.gitmichaelliao為賬戶名,修改為自己的,learngit是在github上建立的遠端庫

把本地庫的內容推送到遠端,用git push命令,實際上是把當前分支master推送到遠端,第一次推送:git push -u origin master,之後使用git push origin master即可。

github給出的位址不止乙個,還可以用這樣的位址。實際上,git支援多種協議,預設的git://使用ssh,但也可以使用https等其他協議。

使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http埠的公司內部就無法使用ssh協議而只能用https。

建立dev分支,然後切換到dev分支

git checkout -b dev

命令檢視當前分支

git branch

合併時,要先切換回master分支git checkout master

然後:git merge dev

合併完成後,就可以放心地刪除dev分支了

git branch -d dev

實際上,切換分支這個動作,用switch更科學。因此,最新版本的git提供了新的git switch命令來切換分支:

建立並切換到新的dev分支,可以使用:

git switch -c dev

直接切換到已有的master分支,可以使用:

git switch master

使用新的git switch命令,比git checkout要更容易理解。

這種情況下,git無法執行「快速合併」,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突,必須手動解決衝突後再提交。

git log --graph命令可以看到分支合併圖。也可以簡化輸出結果

git log --graph --pretty=oneline --abbrev-commit

通常,合併分支時,如果可能,git會用fast forward模式,但這種模式下,刪除分支後,會丟掉分支資訊。

如果要強制禁用fast forward模式,git就會在merge時生成乙個新的commit,這樣,從分支歷史上就可以看出分支資訊。

合併分支時,使用–no-ff引數,表示禁用fast forward

如:git merge --no-ff -m "merge with no-ff" dev

git還提供了乙個stash功能,可以把當前工作現場「儲藏」起來,等以後恢復現場後繼續工作:git stash

檢視「儲藏區」:git stash list當我們在master分支修復bug之後,dev是早期master分支分出來的,所以bug在dev分支上依然存在。

同樣的bug,要在dev上修復,我們只需要把4c805e2 fix bug 101這個提交所做的修改「複製」到dev分支。注意:我們只想複製4c805e2 fix bug 101這個提交所做的修改,並不是把整個master分支merge過來

cherry-pick命令,讓我們能複製乙個特定的提交到當前分支

如果要丟棄乙個沒有被合併過的分支,可以通過git branch -d強行刪除

檢視遠端庫資訊,使用git remote -v

本地新建的分支如果不推送到遠端,對其他人就是不可見的;

從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠端的新提交;

在本地建立和遠端分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠端分支的名稱最好一致;

建立本地分支和遠端分支的關聯,使用git branch --set-upstream branch-name origin/branch-name

從遠端抓取分支,使用git pull,如果有衝突,要先處理衝突。

git rebase操作可以把本地未push的分叉提交歷史整理成直線;

rebase的目的是使得我們在檢視歷史提交的變化時更容易,因為分叉的提交需要三方對比。

標籤不是按時間順序列出,而是按字母排序的 ,建立的標籤都只儲存在本地,不會自動推送到遠端。

命令git tag用於新建乙個標籤,預設為head,也可以指定乙個commit id;

命令git tag -a -m "blablabla..."可以指定標籤資訊;

命令git show檢視標籤資訊和說明文字

命令git tag可以檢視所有標籤

命令git push origin可以推送乙個本地標籤;

命令git push origin --tags可以推送全部未推送過的本地標籤;

命令git tag -d可以刪除乙個本地標籤;

命令git push origin :refs/tags/可以刪除乙個遠端標籤。

在github上,可以任意fork開源倉庫;

自己擁有fork後的倉庫的讀寫許可權;

in --tags`可以推送全部未推送過的本地標籤;

命令git tag -d可以刪除乙個本地標籤;

命令git push origin :refs/tags/可以刪除乙個遠端標籤。

在github上,可以任意fork開源倉庫;

自己擁有fork後的倉庫的讀寫許可權;

可以推送pull request給官方倉庫來貢獻**。

Git簡明教程

git是拿來控制版本的,版本控制即vcs version control system 版本控制最初是linux之父拿來管理複雜的linux核心版本的 本地版本控制 容易與備份混淆 分布式版本控制 每個使用者都有乙個專案的完整拷貝,可以通過fetch pull與伺服器同步,便於協同工作 modifi...

Git簡明教程

mkdir path to your project cd path to your project git init git remote add origin 建立你的第乙個檔案,提交,然後推送到倉庫。git config global user.email xx xx.com git conf...

git簡明教程

ssh keygen t rsa c xx.com 冒號中的內容是郵箱,此操作用來生成rsa金鑰,用來標定你使用的計算機。根據提示資訊找到金鑰id rsa.pub,copy一下,將該金鑰新增到使用者的setting選單下的ssh key那一欄 ssh t git github.com可以檢查金鑰新增...