使用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 一般存放...