GIT 之 基礎知識

2021-08-07 15:41:03 字數 3099 閱讀 9451

使用git也有一段時間了,把自己常用的命令用自己的描述記錄起來,方便自己備忘也方便其他人參考。

目錄: 

最基本的命令

git clone 拷貝並跟蹤遠端的master分支。跟蹤的好處是以後可以直接通過pull和push命令來提交或者獲取遠端最新的**,而不需要指定遠端分支名字。

git submodule init

git submodule update 

參考示意圖

head 指向當前的commit 物件,同時也用來表明我們在哪個branch上工作。所以當我們使用head來操作指標的時候,其實就是不改變當前的commit的指向。

對照這張圖來理解兩段提交,工作區(working tree),暫存區(index)和 branch之間的關係

顯示資訊類命令

git ls-files -u 顯示衝突的檔案,-s是顯示標記為衝突已解決的檔案

git diff 對比工作區和stage檔案的差異 

git diff --cached 對比stage和branch之間的差異

git branch 列出當前repository下的所有branch 

git branch --a 列出local 和remote下的所有branch

git ls-files --stage 檢查儲存在stage的檔案

git log 顯示到head所指向的commit為止的所有commit記錄 。使用reset head~n 命令使head指標向前移動,會導致head之後的commit記錄不會被顯示。

git log -g則會查詢reflog去檢視最近做了哪些動作,這樣可以配合git branch 恢復之前因為移動head指標所丟棄的commit物件。如果reflog丟失則可以通過git fsck --full來檢視沒被引用的commit物件。 

git log -p -2 對比最新兩次的commit物件 

log -1 head

git log --pretty=oneline

git log --stat 1a410e 檢視sha1為1a410e的commit物件的記錄

git blame -l 12,22 sth.cs 如果你發現自己**中 的乙個方法存在缺陷,你可以用git blame來標註檔案,檢視那個方法的每一行分別是由誰 在哪一天修改的。下面這個例子使用了-l選項來限制輸出範圍在第12至22行

建立類命令

git brach branchname 建立名為branchname的branch 

git checkout branchname 切換到branchname的branch 

git checkout -b 建立並切換,也就是上面兩個命令的合併

git brach branchname ef71 從commit ef71建立名為branchname的branch

撤銷類命令

如果是單個檔案 

1.use "git reset head ..." to unstage 

如果已經用add 命令把檔案加入stage了,就先需要從stage中撤銷

然後再從工作區撤銷 

2.use "git checkout -- ..." to discard changes in working directory

git checkout a.txt  撤銷a.txt的變動(工作區上的檔案) 

如果是多個檔案 

git chenkout .

如果已經commit 了,則需要 

git commit --amend 來修改,這個只能修改最近上一次的,也就是用乙個新的提交來覆蓋上一次的提交。因此如果push以後再做這個動作就會有危險

$ git reset --hard head 放棄工作區和index的改動,head指標仍然指向當前的commit.(參照第一幅圖)

這條命令同時還可以用來撤銷還沒commit的merge,其實原理就是放棄index和工作區的改動,因為沒commit的改動只存在於index和工作區中。

$ git reset --hard head^ 用來撤銷已經commit的內容(等價於 git reset --hard head~1) 。原理就是放棄工作區和index的改動,同時head指標指向前乙個commit物件。

git revert 也是撤銷命令,區別在於reset是指向原地或者向前移動指標,git revert是建立乙個commit來覆蓋當前的commit,指標向後移動

提交類命令

git add 跟蹤新檔案或者已有檔案的改動,或者用來解決衝突

git commit 把檔案從stage提交到branch

git commit -a 把修改的檔案先提交到stage,然後再從stash提交到branch

刪除類命令

git rm --cached readme.txt 只從stage中刪除,保留物理檔案

git rm readme.txt 不但從stage中刪除,同時刪除物理檔案

git mv a.txt b.txt 把a.txt改名為b.txt

merge類命令

在衝突狀態下,需要解決衝突的檔案會從index打回到工作區。

1.用工具或者手工解決衝突 

2.git add 命令來表明衝突已經解決。 

3.再次commit 已解決衝突的檔案。

$ git reset --hard orig_head 用來撤銷已經commit 的merge. 

$ git reset --hard head 用來撤銷還沒commit 的merge,其實原理就是放棄index和工作區的改動。

git reset --merge orig_head,注意其中的--hard 換成了 --merge,這樣就可以避免在回滾時清除working tree。

Git 基礎知識

2019 february 16 git簡寫 狀態說明 備註?untracked 未跟蹤此檔案在資料夾中,但並沒有加入到git庫,不參與版本控制,通過git add 狀態變為staged mmunmodified 已入庫未修改 如果它被修改,而變為modified,如果使用git rm移出版本庫,則...

git基礎知識

git歷史 略 git與svn對比 集中式版本控制工具缺點 git是分布式版本控制系統,分為兩種型別的倉庫 本地倉庫和遠端倉庫 git工作流程 工作流程如下 從遠端倉庫中轉殖 到本地倉庫 從本地倉庫中checkout 然後進行 修改 在提交前先將 提交到暫存區 提交到本地倉庫。本地倉庫中儲存修改的各...

Git基礎知識

git版本控制下的工程區域的概念 版本庫 repository 在工作區中有乙個隱藏的目錄.git,這個資料夾就是git的版本庫,裡面存放了git用來管理該工程的所有版本資料,也叫本地倉庫。工作區 working directory 日常工作的 檔案或者文件所在的資料夾。暫存區 stage 一般存放...