git學習筆記

2021-08-06 03:16:35 字數 3696 閱讀 8811

初始化乙個git倉庫,使用git init命令。

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

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

第二步,使用命令git commit,完成。

git status命令可以讓我們時刻掌握倉庫當前的狀態,

已經記不清上次怎麼修改的readme.txt,所以,需要用git diff這個命令檢視具體修改

時光穿梭機:

版本控制系統肯定有某個命令可以告訴我們歷史記錄,在git中,我們用git log命令檢視:

git必須知道當前版本是哪個版本,在git中,用head表示當前版本,也就是最新的提交 94e1cd3f5024ccd4bb0e3595e0775ab3fb12636d(commit id版本號)

上乙個版本就是head^,上上乙個版本就是head^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成head~100。gi

tres

et–h

ard94

e1cd

3f(版

本號沒必

要寫全)

當你用

git reset –hard 94e1cd3f(版本號沒必要寫全)

小結:head指向的版本就是當前版本,因此,git允許我們在版本的歷史之間穿梭,使用命令git reset –hard commit_id。

穿梭前,用git log可以檢視提交歷史,以便確定要回退到哪個版本。

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

撤銷修改

命令git checkout – readme.txt意思就是,把readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況:

一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到暫存區後的狀態。

總之,就是讓這個檔案回到最近一次git commit或git add時的狀態。

git同樣告訴我們,用命令git reset head file可以把暫存區的修改撤銷掉(unstage),重新放回工作區:

小結 場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout – file。

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

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。

刪除檔案

一是確實要從版本庫中刪除該檔案,那就用命令git rm刪掉,並且git commit:

另一種情況是刪錯了,因為版本庫里還有呢,所以可以很輕鬆地把誤刪的檔案恢復到最新版本:

建立ssh-key

$ ssh-keygen -t rsa -c 「[email protected]

為什麼github需要ssh key呢?因為github需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而git支援ssh協議,所以,github只要知道了你的公鑰,就可以確認只有你自己才能推送。

我們根據github的提示,在本地的learngit倉庫下執行命令:

$ git remote add origin [email protected]:liuwan12/learngit.git

從現在起,只要本地作了提交,就可以通過命令:

$ git push origin master

把本地master分支的最新修改推送至github,現在,你就擁有了真正的分布式版本庫!

小結 要關聯乙個遠端庫,使用命令git remote add origin git@server-name:path/repo-name.git;

關聯後,使用命令git push -u origin master第一次推送master分支的所有內容;

此後,每次本地提交後,只要有必要,就可以使用命令git push origin master推送最新修改;

分布式版本系統的最大好處之一是在本地工作完全不需要考慮遠端庫的存在,也就是有沒有聯網都可以正常工作,而svn在沒有聯網的時候是拒絕幹活的!當有網路的時候,再把本地提交推送一下就完成了同步,真是太方便了!

要轉殖乙個倉庫,首先必須知道倉庫的位址,然後使用git clone命令轉殖。

git支援多種協議,包括https,但通過ssh支援的原生git協議速度最快。

git鼓勵大量使用分支:

分支命令

檢視分支:git branch

建立分支:git branch

切換分支:git checkout

建立+切換分支:git checkout -b

合併某分支到當前分支:git merge

刪除分支:git branch -d

當git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。

用git log –graph命令可以看到分支合併圖。

合併分支時,加上–no-ff引數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

修復bug

修復bug時,我們會通過建立新的bug分支進行修復,然後合併,最後刪除;

當手頭工作沒有完成時,先把工作現場git stash一下,然後去修復bug,修復後,再git stash pop,回到工作現場。

開發乙個新feature,最好新建乙個分支;

如果要丟棄乙個沒有被合併過的分支,可以通過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,如果有衝突,要先處理衝突

tag:

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

git tag -a -m 「blablabla…」可以指定標籤資訊;

git tag -s -m 「blablabla…」可以用pgp簽名標籤;

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

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

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

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

命令git push origin :refs/tags/

可以刪除乙個遠端標籤。

Git學習筆記

git stash git stash list 顯示git棧內的所有備份,可以利用這個列表來決定從那個地方恢復。git stash clear 清空git棧。此時使用gitg等圖形化工具會發現,原來stash的哪些節點都消失了。關於git stash的詳細解釋,適用場合,這裡做乙個說明 使用git...

git 學習筆記

1 git checkout master 切換分支 2 git checkout b xx 新建分支,同時切換到該分支 3 dev 4 git add a 將變動檔案,提交到index 5 git commit m 將 暫存區 檔案,加入到版本控制中。6 git checkout master 7...

Git 學習筆記

顯示版本庫.git所在的目錄 git rev parse git dir 顯示工作區的根目錄 git rev parse show toplevel 相對於工作區根目錄的相對目錄 git rev parse show prefix git config 命令各引數的區別 git config e 版...