git入門操作總結

實習一個月,從git入門到使用多次後一點點理解,再總結一次發現收穫良多,本文儘量從日常使用和簡單的角度來描述git操作,僅作記錄,也希望對大家有所幫助 

git 常用

文件狀態

add,commit

status:查看文件狀態

文件的狀態總的來說只有traced和untraced,一個文件被創建以後,吐過沒有add,那麼使用git status 顯示的狀態是untraced,這時的文件不能git commit -m,需要用git add 來使文件狀態變爲traced 纔是可以git commit -m的,但是未traced的文件可以使用git commit -am來提交,相當於結合了git add 和git commit -m git commit -m 和 git commit -am 的區別 在創建新文件後,文件是untraced的,這是使用git add使他變爲tranced的,這時用git commit -m 可以把該文件提交到本地緩存區(stage)中,但是此後更改該文件中的內容,再使用git commit -m 是無法提交更改後的最新內容的,這時就需要使用git add再次把工作區的內容添加到stage,然後再git commit -m 或者使用git commit -am

 

分支

分支結構head不是指向遠端的某個分支,而是指向分支的commit,head在本地存在的形式是文件的形式,在本地git文件夾 下有refs/heads下有各個分支對應的commit提交文件 head文件結構也就是說每次checkout都是從本地工作區(index)切換到heads下的對應分支的 文件中,每次fetch也是把遠端的最新commit拉到heads下對應分支的文件中。

分支流轉

分支checkout分支可以從matercheckout也可以從另一個分支checkout,當一個分支還需要多人開發的時候,就需要從分支checkout, 默認是從mater來checkout。 分支pull和merge當分支A是從另一個分支B checkout的時候,每次提交(push)前要先從分支B pull一下, 拉取最新的代碼,然後再push,如果要上線前需要pull一次mater的代碼,然後push到遠端, 然後合併到mater分支,如果不再使用該分支,可以git branch -d feature/XX 刪除該分支。

如果pull或者merge的時候有衝突,需要手動改衝突,並再次add+merge(或者commit),在改動前需要查看 兩個分支的區別,可以git diff branch1 branch2 來查看不同。

如果工作區的改動不想要了,那麼可以git checkout – 來用head中的文件覆蓋工作區的文件

fetch是把遠端的feature/YY的代碼拉倒本地的feature/YY上的.git/FETCH_HEAD文件中, 與git pull相比git fetch相當於是從遠程獲取最新版本到本地,但不會自動merge。如果需要有選擇的合 並git fetch是更好的選擇。效果相同時git pull將更爲快捷。

stash/stash pop(apply)

stash是用來暫存工作區的代碼的,就像給工作區存一個快照,在需要的時候git stash, 需要取出這個快照的內容的時候用git stash pop。

  • 使用場景: 1、寫了代碼但是不想要,又不想提交髒代碼,但是又怕以後有用,可以git stash save message, 在需要之前的代碼的時候,使用git stash pop 或git stash apply就可以把之前寫的代碼合併 到當前分支 2、當在本分支A寫代碼的時候,需要馬上切換到另一個分支B去開發或者fix bug,這時可以用stash暫存 工作區,然後切換到分支B,完成分支B後切回分支A,再stash apply即可,這樣可以避免很多無用的 commit 3、當你發現修改錯了分支,比如你本來想修改你的分支A,結果不小心在master修改了,那麼這時可以stash 一下,然後git checkout一下丟棄當前的改動,切換到分支A,再git stash pop或者git stash apply 一下,就可以把改動恢復到分支A中

  • git stash pop 和 git stash apply的區別

    • git stash pop:刪除並應用最新的stash
    • git stash apply : 應用但不刪除stash,而且可以指定應用某個stash
  • 查看stash:git stash list

  • 刪除stash:git stash drop

  • 查看指定stash和當前工作區的diff:git stash show

rebase://TODO

代碼回滾:reset,checkout,revert

  • reset: git reset HEAD~2表示撤回本地head區的兩個commit,在stage區還保留,如果git status 會發現這兩個提交處於stage區,待提交,這時這兩個提交處於懸掛狀態,下次git垃圾回收的時候會清除掉這兩個 commit,此外reset還可以選擇回滾的範圍: –soft:只撤銷head中的commit,但是保留stage和工作區的代碼 –mixed:撤銷head和stage的代碼,保留工作區的代碼 –hard:回滾所有代碼 

  • revert:git revert HEAD~2 ,revert不會改變現有的提交歷史,他只會撤銷選定的commit更改的代碼,然後重新提交一個commit來 代替以前的commit,因此不會改變commit的歷史(log) 

  • checkout:checkout是把工作區轉到head的heads下對應分支的文件中,因此,如果沒有做git stash 直接checkout,就相當於丟棄當前工作目錄中的改動,checkout

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章