git clone:
? ? ? git clone支持多種協議,除了HTTP(s)以外,還支持SSH、Git、本地文件協議等,通常來說,Git協議下載速度最快,SSH協議用于需要用戶認證的場合。在clone完成之后,Git 會自動為你將此遠程倉庫命名為origin(origin只相當于一個別名,運行git remote –v或者查看.git/config可以看到origin的含義),并下載其中所有的數據,建立一個指向它的master 分支的指針,我們用(遠程倉庫名)/(分支名) 這樣的形式表示遠程分支,所以origin/master指向的是一個remote branch(從那個branch我們clone數據到本地),但你無法在本地更改其數據。同時,Git 會建立一個屬于你自己的本地master 分支,它指向的是你剛剛從remote server傳到你本地的副本。隨著你不斷的改動文件,git add, git commit,master的指向會自動移動,你也可以通過merge(fast forward)來移動master的指向。
git clone + 遠程倉庫項目網址:
克隆遠程倉庫項目到本地倉庫,也就是俗稱的拉代碼,本地倉庫生成的項目與遠程倉庫的項目結構一致。git clone + 遠程倉庫項目網址 + 本地倉庫項目目錄:克隆遠程倉庫項目到本地倉庫,本地倉庫生成的項目放在第二個參數【本地倉庫項目目錄】中
git fetch:
理解 fetch 的關鍵, 是理解 FETCH_HEAD.FETCH_HEAD指的是: 某個branch在服務器上的最新狀態.每一個執行過fetch操作的項目都會存在一個FETCH_HEAD列表, 這個列表保存在 .git/FETCH_HEAD 文件中, 其中每一行對應于遠程服務器的一個分支.git fetch這一步其實是執行了兩個關鍵操作:- 創建并更新所有遠程分支的本地遠程分支.- 設定當前分支的FETCH_HEAD為遠程服務器的master分支 (默認的)相當于在本地新建了一個分支,不過這個分支是隱藏的,也可以理解為,將遠程的更新克隆的到了本地,但是還沒有與本地的文件合并.拉下來的更新用 origin/master 來訪問,后期可用git branch origin/master 來合并剛剛拉下來的更新需要注意的是: 和push不同, fetch會自動獲取遠程'新加入'的分支.git fetch origin同上, 只不過手動指定了遠程倉庫.git fetch origin branch1取回指定分支遠程倉庫的branch1分支的更新到本地注意: 在這種情況下, 不會在本地創建本地遠程分支, 這是因為:這個操作是git pull origin branch1的第一步, 而對應的pull操作,并不會在本地創建新的branch.
git fetch origin branch1:branch2
首先執行上面的fetch操作,使用遠程branch1分支在本地創建branch2(但不會切換到該分支), 如果本地不存在branch2分支, 則會自動創建一個新的branch2分支, 如果本地存在branch2分支, 并且是`fast forward', 則自動合并兩個分支, 否則, 會阻止以上操作.
git fetch origin :branch2
等價于: git fetch origin master:branch2
git rebase + 分支名稱:
合并分支,與fetch連用,合并修改,fetch了哪個分支就合并哪個分支
git branch -r:
顯示遠程分支
Git push:
git? push? origin? 本地分支A :?遠程分支B?
push 本地分支A到遠程庫origin的分支B HEAD指向當前工作的branch,master不一定指向當前工作的branch可以發現,master就是local branch,origin/master是remote branch$git diff origin/master master (show me the changes between the remote master branch and my master branch).需要注意的是,remotes/origin/master和origin/master的指向是相同的$git diff origin/master remotes/origin/master git push origin masterorigin指定了你要push到哪個remotemaster其實是一個“refspec”,正常的“refspec”的形式為”+:”,冒號前表示local branch的名字,冒號后表示remote repository下 branch的名字。注意,如果你省略了,git就認為你想push到remote repository下和local branch相同名字的branch。聽起來有點拗口,再解釋下,push是怎么個push法,就是把本地branch指向的commit push到remote repository下的branchgit push origin master:master (在local repository中找到名字為master的branch,使用它去更新remote repository下名字為master的branch,如果remote repository下不存在名字是master的branch,那么新建一個,如果存在則報錯)git push origin master:(省略了,等價于“git push origin master:master”)
git push origin master:refs/for/mybranch :
(在local repository中找到名字為master的branch,用他去更新remote repository下面名字為mybranch的branch)
git push origin HEAD:refs/for/mybranch :
(HEAD指向當前工作的branch,master不一定指向當前工作的branch,所以我覺得用HEAD還比master好些)
git push origin? ? :mybranch :
(再origin repository里面查找mybranch,刪除它。用一個空的去更新它,就相當于刪除了)
git stash:
git棧,在切換分支的時候,當前分支有未完成提交的代碼,但又不想提交,一方面是因為代碼沒有完成,一方面是因為這樣會在log中打印許多無用的日志信息。但是不提交就無法切換分支,于是git便開辟出來一個臨時的倉庫,這個倉庫可以暫時存放最新修改過的代碼。
git棧,可以存放多次修改,切換分支后這些存放的修改還在。
工作區--------暫存區--------本地倉庫
? ? ? ? \
? ? ? ? ? ? \
? ? ? ? ? ? ? ? ? \----git棧
git stash
保存當前的工作進度,會分別對暫存區和工作區的狀態進行保存。保存后工作區恢復到之前最后一次提交的狀態
git stash list
顯示進度列表。此命令顯然顯示了git stash 可以多次保存工作進度,并在恢復時候選擇。
git stash pop [--index] []
如果不使用任何參數,會恢復最新保存的工作進度,并將恢復的工作進度從存儲的git棧列表中清除。
如果提供參數(來自git stash list顯示的列表),則將工作進度恢復?;謴屯戤呉矊膅it棧刪除工作進度。
git stash [save [--patch] [-k|--[no]keep-index] [-q|--quiet] []]
這條命令實際上是第一條git stash命令的完整版。
使用參數--patch會顯示工作區和HEAD的差異,通過對差異文件的編輯決定在進度中最終要保存的工作區的內容,通過編輯差異文件可以在進度中排除無關內容。
使用-k或者--keep-index參數,在保存進度后不會將暫存區重置。默認會將暫存區和工作區強制重置。
git stash apply [--index] []
除了不刪除恢復的進度之外,其余和git stash pop 命令一樣。
git stash drop []
刪除一個存儲的進度。默認刪除最新的進度。
git stash clear
刪除所有存儲的進度。