天天看點

git常用的操作指令學習

送出。

從暫存區撤回修改

reset指令可以用來重置暫存區,主要用于被重置add的部分。如果add指令之後,這個檔案有了其他修改,那麼這些修改有可能會丢失。

git reset HEAD .
git reset HEAD foo.txt
           

儲存修改

我們可以用stash指令,将工作區和暫存區的修改儲存在一個儲藏棧中。

git stash

恢複被儲藏的修改

我們可以用這個指令将儲藏的修改恢複到工作區中

git stash pop
//檢查儲存了哪些内容
git stash list
           

分支

執行切換分支的指令被拒絕該怎麼辦?

有時候如果工作區域還有一些修改,這個時候去切換分支,就會被拒絕。解決的方式有三種。第一種是送出現有的修改,然後切換。第二種是強制切換。第三種儲藏的修改并切換分支。

  • 方式一
git commit --all
git checkout a-branch
           
  • 方式二

    git checkout --force a-branch

  • 方式三
git stash
git checkout a-branch
//做一些修改并送出,在切回原來的分支
git stash pop
           

重置分支指針

分支指針每一次送出時都會移動到最新的送出上。通常情況下不太需要去設定分支指針。但是有時候我們會丢失的鈣質人的。追蹤想要恢複到之前的狀态,就需要通過重置分支指針來實作。注意它與

git reset --hard 39rt54b

注意這個指令會覆寫目前工作區和暫存區所有的修改,最好使用git stash 來儲存一下修改。

合并分支

快速合并,開發者們在a分支下進行開發,而b分支上什麼都不做。當b與a進行分支合并的時,git就變得非常簡單。但是這樣的合并并不會産生新的commit節點。

git merge --no--ff a-branch

這個指令可以強制産生一次新的送出。

變基操作

将git送出複制到其他地方,盡管修改與中繼資料保持不變。但是複制的結果會産生一個新的送出。這種方式被稱為複制送出。通常複制送出有兩個指令,git rebase和git cherry-pick

git rebase

通常這個指令你用來理順曆史送出,或者将一個分支上的送出複制到另一個分支上。

git rebase master --onto release1

解釋: 目前分支是feature-a master是原分支 release1 目标分支。 git會确認活動分支上所有不屬于原分支的送出,通過–onto選項将這些送出拷貝目标分支。如git學習指南上的60頁圖8-3

cherry-pick

摘櫻桃,主要用于撿取操作。如将一些bug的修複傳遞到各個不同的發行版本中。還有另一種應用,從即将删除的分支中轉移一些有用的送出。

版本标簽

建立一個普通标簽

git tag 1.0.0 master -m "釋出的第一個版本"
           

推送某個單一标簽

git push origin 1.0.0
           

檢視某個特定的功能,或者bug修複是否包含在客戶所安裝的那個版本。

git tag --contains f63cd77
           

技巧

找回丢失的修改

git像一條狗,它聞出你的恐懼

git通常不會立即删除版本中的對象。無論什麼時候,我們修改了一些東西也好。在版本庫中始終是建立了一些對象而已。舊的對象都不會被删除,即使我們調用了gc指令。git 會持續跟蹤一個分支上所發生的所有修改,并将這些所謂的日志存在logs目錄下。可以通過–walk-reflogs選項來顯示一個分支的本地記錄。

git log --walk-reflogs mybranch

隻要我們找到丢失的修改就可以通過cherry-pick指令和rebase指令将丢失的送出找回來。

忽略一些已被版本化的檔案

通常我們不希望一些修改被版本化,我們可以臨時性的忽略這個檔案。

git update-index --assume-unchange  foo.txt
//暫時忽略這個檔案。以後的add  或者 status  就不會被顯示發生的修改
git update-index --really-refresh
//停止臨時性忽略