1. git branch管理常用命令
git
branch管理常用命令查看本地分支[plain]git
branch
*
dev
master
*代表當前位於dev分支查看遠程分支[plain]git
branch
--remote
origin/dev
origin/master
創建分支[plain]git
checkout
-b
new_branch
注意,new_branch的代碼來自於當前分支切換分支[plain]git
checkout
another_branch
和創建分支就差-b參數push本地分支代碼到遠端伺服器[plain]git
push
origin
branch_name
如果遠端伺服器沒有該分支,將會自動創建pull遠端分支代碼到本地對應分支[plain]git
pull
origin
branch_name
刪除本地分支,首先切換到別的分支,然後才能刪除某個分支[plain]git
checkout
b
git
branch
-d
a
刪除遠程分支[plain]git
push
origin
--delete
branch_name
合並本地分支[plain]git
merge
b
假設當前分支為dev,上面的命令就是將本地的b分支代碼合並到當前分支dev中合並遠程分支,和前面的幾乎一樣,[plain]git
merge
origin/b
遠程分支b被合並到本地當前分支dev中了。
2. git中,文件的狀態
git中常用的一個命令便是,git status,該命令的作用是查看哪些文件處於什麼狀態.
可以用 git status 命令查看哪些文件處於什麼狀態。 如果在克隆倉庫後立即使用此命令,會看到類似這樣的輸出:
echo 'My Project' > README
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
nothing added to commit but untracked files present (use "git add" to track)
在狀態報告中,可以看到,出現了一個untracked files文件,readme.未跟蹤的文件意味著在之前的快照(提交)中沒有這些文件,git不會自動的將這些文件納入可追蹤的范圍,除非需要明確的指出我要跟蹤做這些文件.此時,可以執行:
git add readme.txt
再運行git status
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README
可以看到readme文件處於被追蹤的狀態中,是被暫存的狀態.但是仍然沒有commit.
此時,如果我們做了修改,對於一個被追蹤的文件,進行了修改,如果你修改了一個CONTRIBUTING.md的已經被追蹤的文件,然後運行:
git status
則會出現以下內容:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
意思為: 名為CONTRIBUTING.md已經跟蹤的文件發生了變化.但是還沒有被放入暫存區,如需要暫存本次修改,需要運行git add命令.
git add命令是一個多命令,可以使用將其從未追蹤文件變為已追蹤文件,還可以將已追蹤文件未修改的內容,變為已追蹤文件暫存.還能用戶合並時將沖突文件標記為已解決的狀態等.
此時,運行git status輸出為:
git add CONTRIBUTING.md
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
可以看到,此時輸出的意思為:兩個文件都已經暫存,在下次commit時,會一起提交到倉庫.
假設此時,需要繼續在修改CONTRIBUTING.md文件,此時再運行git status命令,會出現:
git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
此時,CONTRIBUTING.md文件同時出現在暫存區和非暫存區,是因為,git add文件只是暫存了上次執行git add命令時文件的暫存,如若繼續暫存,需要繼續運行git status
git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
如果我們需要查看當前工作區文件和暫存區文件的差異,可以使用git diff命令.若要查看已暫存的將要添加到下次提交里的內容,可以用 git diff --staged 命令。 這條命令將比對已暫存文件與最後一次提交的文件差異.
此時,可以進行commit,進行提交啦.現在的暫存區已經准備就緒,可以提交了。 在此之前,請務必確認還有什麼已修改或新建的文件還沒有 git add 過, 否則提交的時候不會記錄這些尚未暫存的變化。 這些已修改但未暫存的文件只會保留在本地磁碟。 所以,每次准備提交前,先用 git status 看下,你所需要的文件是不是都已暫存起來了, 然後再運行提交命令 git commit.
現在你已經創建了第一個提交! 可以看到,提交後它會告訴你,當前是在哪個分支(master)提交的,本次提交的完整 SHA-1 校驗和是什麼(463dc4f),以及在本次提交中,有多少文件修訂過,多少行添加和刪改過。
提交記錄的是放在暫存區域的快照.任何還未暫存的文件仍然保持已修改的狀態,可以在下次提交時納入版本管理,每次運行一次git commit都是對項目做一次快照,以後可以回到這個狀態,或者進行比較.
跳過使用暫存區域
盡管使用暫存區域的方式可以靜心准備要提交的細節,但是,有個問題就是繁瑣,git提供了一個暫存區域的方式,只要提交的時候,git commit -a,則git會將已經跟蹤過的文件暫存起來一起提交.從而省略一次git add,省略的步驟是,將那些已被追蹤的文件改為暫存.這是因為 -a 選項使本次提交包含了所有修改過的文件。 這很方便,但是要小心,有時這個選項會將不需要的文件添加到提交中。
查看git提交歷史,使用git log命令.會出現下面輸出:
$ git log
commit
Author: Scott Chacon [email protected]
Date: Mon Mar 17 21:52:11 2008 -0700
commit
Author: Scott Chacon [email protected]
Date: Sat Mar 15 16:40:33 2008 -0700
commit
Author: Scott Chacon [email protected]
Date: Sat Mar 15 10:31:28 2008 -0700
在不傳入任何參數的前提下,git log會按照時間順序列出所有的提交,按照時間順序倒排,commit之後是每次提交的SHA-1校驗和(是一個十六位的長度為四十的哈希值),以及作者信息和提交說明.
3. Git工作流程和常用命令分享
git是一個分布式版本控制軟體,最初由林納斯·托瓦茲創作,於2005年以GPL發布。最初目的是為更好地管理Linux內核開發而設計。林納斯·托瓦茲在編寫第一個版本時就使用了「git」這個名稱, 他將工具描述為「愚蠢的內容跟蹤器」。
[圖片上傳失敗...(image-c23291-1619063471664)]
四個專有名詞:
Workspace:工作區
Index / Stage:暫存區
Repository:倉庫區(或本地倉庫)
Remote:遠程倉庫
打開本地生成的.git隱藏文件
創建新項目gittest
創建新文件test.txt
git add <file>
git status顯示有變更的文件
git restore <file> 撤迴文件修改內容
git commit –m 「注釋」
修改內容-> 執行git diff工作區和本地倉庫的差異
git log顯示當前分支的版本歷史
git reset --hard HEAD^ 當前版本回退到上一個版本
git reset --hard HEAD^ ^ 當前版本回退到上上一個版本
git reset --hard HEAD~100 回退到前100個版本
恢復已經刪除的版本
git reflog 展示所有的提交記錄
git reset --hard <版本號> 回退到指定版本
git push origin master 將本地master分支推送到遠程master分支,相當於創建遠程分支
git checkout -b dev = git branch dev + git checkout dev 創建並切換分支
git branch 不帶參數,會列出所有本地的分支;帶參數表示創建分支
git branch –d name 刪除本地分支(-D表示強制刪除)
git branch –r 不帶參數,會列出所有遠程的分支
git branch --set-upstream-to=origin/<branch本地> 本地和遠程分支關聯
git push origin –delete <branch> 刪除遠程分支
git merge release用於合並指定分支到當前分支上
註:Fast-forward表示的合並是「快進模式」,也就是直接把master指向dev的當前提交,所以合並速度非常快。在這種模式下,刪除分支後,會丟掉分支日誌信息。可以使用帶參數 --no-ff來禁用」Fast forward」模式。
git merge --no-ff -m 「注釋」dev
git checkout release 切換release分支
vim test.txt 修改某條內容
git commit test.txt -m 「release修改某條內容」
git checkout master 切換master分支
vim test.txt 修改某條同release內容
git commit test.txt -m 「master修改某條內容」
git merge release 顯示沖突
git status 顯示沖突提示
Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,其中>>>>release 是指release上修改的內容
vim test.txt 修改內容
git add test.txt
git commit -a -m 「fix conflict」
當前分支有沒有提交但也不合適現在就提交的內容,Git提供了暫儲功能stash
git checkout release
vim test.txt 修改test.txt內容
git checkout develop 此時會提示Aborting
git status 查看當前狀態
Git stash list 查看所有暫儲列表
git stash apply恢復,恢復後stash內容並不刪除,你需要使用命令git stash drop來刪除;
另一種方式是使用git stash pop,恢復的同時把stash內容也刪除了
創建Git Tag並推送遠程伺服器
git tag -a V1.0.0 –m「注釋」 //創建TAG
git push origin V1.0.0 //推送到遠程伺服器
git push origin --tag //提交所有tag至伺服器
git tag -d V1.0.0 //刪除本地標簽
git push origin --delete tag <tagname> //刪除遠程標簽
HEAD,它始終指向當前所處分支的最新的提交點。你所處的分支變化了,或者產生了新的提交點,HEAD就會跟著改變
add相關命令很簡單,主要實現將工作區修改的內容提交到暫存區,交由git管理。
git add .添加當前目錄的所有文件到暫存區
git add 添加指定目錄到暫存區,包括子目錄
git add 添加指定文件到暫存區
commit相關命令也很簡單,主要實現將暫存區的內容提交到本地倉庫,並使得當前分支的HEAD向後移動一個提交點。
git commit -m 提交暫存區到本地倉庫,message代表說明信息
git commit --amend -m 使用一次新的commit,替代上一次提交
上傳本地倉庫分支到遠程倉庫分支,實現同步。
git push 上傳本地指定分支到遠程倉庫
git push --force強行推送當前分支到遠程倉庫,即使有沖突
git push --all推送所有分支到遠程倉庫
關於分支,大概有展示分支,切換分支,創建分支,刪除分支這四種操作。
git branch列出所有本地分支
git branch -r列出所有遠程分支
git branch -a列出所有本地分支和遠程分支
git branch 新建一個分支,但依然停留在當前分支
git checkout -b 新建一個分支,並切換到該分支
git checkout 切換到指定分支,並更新工作區
git branch -d 刪除分支
git push origin --delete 刪除遠程分支
關於分支的操作雖然比較多,但都比較簡單好記
merge命令把不同的分支合並起來。在實際開放中,我們可能從master分支中切出一個分支,然後進行開發完成需求,中間經過R3,R4,R5的commit記錄,最後開發完成需要合入master中,這便用到了merge。
git merge 合並指定分支到當前分支
註:如果在merge之後,出現conflict,主要是因為兩個用戶修改了同一文件的同一塊區域。需要針對沖突情況,手動解除沖突。
rebase又稱為衍合,是合並的另外一種選擇。
在開始階段,我們處於new分支上,執行git rebase dev,那麼new分支上新的commit都在dev分支上重演一遍,最後checkout切換回到new分支。這一點與merge是一樣的,合並前後所處的分支並沒有改變。
git rebase dev,通俗的解釋就是new分支想站在dev的肩膀上繼續下去。
rebase操作不會生成新的節點,是將兩個分支融合成一個線性的提交。
rebase也需要手動解決沖突。
1.如果你想要一個干凈的,沒有merge commit的線性歷史樹,那麼你應該選擇git rebase
2.如果你想保留完整的歷史記錄,並且想要避免重寫commit history的風險,你應該選擇使用git merge
reset命令把當前分支指向另一個位置,並且相應的變動工作區和暫存區。
git reset —soft 只改變提交點,暫存區和工作目錄的內容都不改變
git reset —mixed 改變提交點,同時改變暫存區的內容
git reset —hard 暫存區、工作區的內容都會被修改到與提交點完全一致的狀態
git revert用一個新提交來消除一個歷史提交所做的任何修改。
在回滾這一操作上看,效果差不多。git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
在 Git工作區的根目錄創建一個特殊的.gitignore文件。
在.gitignore文件中,添加需要忽略的文件。
git rm -r --cached . //將倉庫中的index遞歸刪除
git add . //重新添加倉庫索引
git commit -m 「update git.ignore」 //提交
git branch --set-upstream-to=origin/<branch> <branch> //重現將本地倉庫和遠程倉庫關聯
最後,如果此篇博文對你有所幫助,別忘了點個贊喲~
4. 【學了就忘】Git操作 — 14.Git基本操作(一)
要對現有的某個項目開始使用Git管理,只需到此項目所在的根目錄,執行 git init 命令即可。
准備一個新的Git本地版本庫:
說明:初始化Git倉庫後,在當前目錄下會出現一個名為 .git 的目錄,所有Git需要的數據和資源都存放在這個目錄中。
不過目前,僅僅是按照既有的結構框架,初始化好了Git倉庫中所有的文件和目錄,但我們還沒有開始跟蹤管理項目中的任何一個文件。
使用 git status 命令進行查看。
進入本地版本庫查看工作區、暫存區中文件的狀態。
1)創建文件後查看工作區、暫存區中文件的狀態
我們在倉庫目錄中創建一個 readme.txt 文件後,在執行 git status 命令。
說明:
2)將工作區的文件添加到暫存區
執行 git add 命令,將 readme.txt 文件添加到暫存區。
3)再次查看工作區、暫存區狀態
執行 git status 命令查看工作區、暫存區狀態。
說明:
總結:
只要在 "Changes to be committed" 這行下面顯示的文件,就說明是已暫存狀態。
如果此時提交,那麼該文件此時此刻的版本,將被留存在歷史記錄中。
在 git add 命令後面可以指明要跟蹤的文件或目錄路徑。
如果是目錄的話,就說明要遞歸跟蹤該目錄下的所有文件。(其實 git add 命令的潛台詞就是把目標文件快照放入暫存區域,同時未曾跟蹤過的文件標記為已跟蹤。)
4)將文件從暫存區撤回到工作區
執行 git rm --cached 命令,將 readme.txt 文件從暫存區撤回到工作區。
並執行 git status 命令查看工作區、暫存區狀態。
可以看到結果, readme.txt 文件又成為了一個未被Git追蹤的文件。
5. git網頁版怎麼查看操作命令
進入網頁版之後滑鼠點擊右鍵,選擇網頁檢索,在裡面可以查到命令記錄
6. 幾個常用的git命令
1.安裝Git
Linux
Window:到Git官網下載安裝:https://git-scm.com/downloads
2.配置全局用戶Name和E-mail
3.初始化倉庫
4.添加文件到Git倉庫
提示:可反復多次使用,添加多個文件;
5.提交添加的文件到Git倉庫
然後會彈出一個Vim編輯器輸入本次提交的內容;
或者
6.查看倉庫當前的狀態
7.比較當前文件的修改
8.查看歷史提交記錄
或者加上參數查看就比較清晰了
9.回退版本
說明:在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,以此類推,如果需要回退幾十個版本,寫幾十個^容易數不過來,所以可以寫,例如回退30個版本為:HEAD~30。
如果你回退完版本又後悔了,想回來,一般情況下是回不來的,但是如果你可以找到你之前的commit id的話,也是可以的,使用如下即可:
提示:commit id不需要寫全,Git會自動查找;
補充說明:Git中,commit id是一個使用SHA1計算出來的一個非常大的數字,用十六進製表示,你提交時看到的一大串類似3628164...882e1e0的就是commit id(版本號);
在Git中,版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向回退的版本,然後順便刷新工作區文件;
10.查看操作的歷史命令記錄
結果會將你之前的操作的commit id和具體的操作類型及相關的信息列印出來,這個命令還有一個作用就是,當你過了幾天,你想回退之前的某次提交,但是你不知道commit id了,通過這個你可查找出commit id,就可以輕松回退了,用一句話總結:穿越未來,回到過去,so easy!
11.diff文件
說明:查看工作區和版本庫裡面最新版本文件的區別,也可以不加HEAD參數;
12.丟棄工作區的修改
說明:適用於工作區修改沒有add的文件
13.丟棄暫存區的文件
說明:適用於暫存區已經add的文件,注意執行完此命令,他會將暫存區的修改放回到工作區中,如果要想工作區的修改也丟棄,就執行第12條命令即可;
14.刪除文件
然後提交即可;
如果不小心刪錯了,如果還沒有提交的話使用下面命令即可恢復刪除,注意的是它只能恢復最近版本提交的修改,你工作區的修改是不能被恢復的!
7. git常用操作
如果不用"pick"或者"edit",而是指定"squash",Git 會同時應用那個變更和它之前的變更並將提交說明歸並。因此,如果想將這三個提交合並為單一提交, 可以將腳本修改成這樣
保存並退出編輯器,Git 會應用全部三次變更然後將送回編輯器來歸並三次提交說明。
然後保存,就會擁有包含前三次提交的全部變更的單一提交 。
註:最頂行pick 不能修改為squash
當你正在進行項目中某一部分的工作,裡面的東西處於一個比較雜亂的狀態,而你想轉到其他分支上進行一些工作。問題是,你不想提交進行了一半的工作,否則以後你無法回到這個工作點。解決這個問題的辦法就是 git stash 命令。
「『儲藏」「可以獲取工作目錄的中間狀態——也就是修改過的被追蹤的文件和暫存的變更——並將它保存到一個未完結變更的堆棧中,隨時可以重新應用。
當追准備切換分支,但是還不想提交你正在進行中的工作;所以儲藏這些變更。為了往堆棧推送一個新的儲藏,只要運行? git stash :
這時,你可以方便地切換到其他分支工作;你的變更都保存在棧上。要查看現有的儲藏,你可以使用? git stash list :
git stash apply :重新應用你剛剛實施的儲藏
git stash apply stash@{number} :應用更早的儲藏
只需回到需要合並的源分支,運行 git merge 命令指定要合並進來的分支即可;Git 作了合並,但沒有提交,它會停下來等你解決沖突。要看看哪些文件在合並時發生沖突,可以用 git status 觀察
任何包含未解決沖突的文件都會以未合並(unmerged)的狀態列出。Git 會在有沖突的文件里加入標準的沖突解決標記,可以通過它們來手工定位並解決這些沖突。可以看到此文件包含類似下面這樣的部分:
可以看到 ======= 隔開的上半部分,是? HEAD (即 master 分支,在運行 merge 命令時所切換到的分支)中的內容,下半部分是在 iss53 分支中的內容。解決沖突的辦法無非是二者選其一或者親自整合到一起。比如可以通過把這段內容替換為下面這樣來解決:
在解決了所有文件里的所有沖突後,運行? git add ?將把它們標記為已解決狀態(譯註:實際上就是來一次快照保存到暫存區域。)
pull時為了防止更改後pull Feiled的出現,先執行commit,stash or revert。
8. git如何查看當前分支是從哪個分支拉的
Git可以使用git reflog --date=local | grep +分支名來查看當前分支是從哪個分支拉下來的。
可以使用git log --graph --decorate --oneline --all來查看當前分支來查看是從哪個分支拉的。
用一個git branch這個比較萬能的命令來查看當前分支是從哪個分支拉取的。
(8)git的常用命令有哪些擴展閱讀:
Git的功能特性:
從伺服器上克隆完整的Git倉庫(包括代碼和版本信息)到單機上。
在自己的機器上根據不同的開發目的,創建分支,修改代碼。
在單機上自己創建的分支上提交代碼。
在單機上合並分支。
把伺服器上最新版的代碼fetch下來,然後跟自己的主分支合並。
生成補丁(patch),把補丁發送給主開發者。
看主開發者的反饋,如果主開發者發現兩個一般開發者之間有沖突(他們之間可以合作解決的沖突),就會要求他們先解決沖突,然後再由其中一個人提交。如果主開發者可以自己解決,或者沒有沖突,就通過。
一般開發者之間解決沖突的方法,開發者之間可以使用pull 命令解決沖突,解決完沖突之後再向主開發者提交補丁。
Git常用基本命令
gitinit:創建一個版本庫。
git add:增加內容跟蹤信息。
gitcommit:提交內容到版本庫。
gitstatus:看 git 的狀態提示。
gitshow-branch:這個命令讓我們看到版本庫的發展記錄。
參考資料來源:網路-Git
9. 【Git】checkout 用法總結
切克鬧(checkout)作為git中最為常用的命令之一,對它使用的熟練程度直接決定了你對git理解和掌握的熟練程度,因此我們有理由為這個命令好好的做一下總結。
checkout最常用的用法莫過於對於工作分支的切換了:
該命令會將當前工作分支切換到branchName。另外,可以通過下面的命令在新分支創建的同時切換分支:
該命令相當於下面這兩條命令的執行結果:
該命令的完全體為:
該命令的一個應用場景為:當我們剛從git上clone一個項目後,我們可以查看該項目的分支情況
可以看到,克隆完後,只會默認創建一個master本地分支,其他都是遠程分支,此時如果我們想切換到newBranch的遠程分支該怎麼操作呢?方法有很多種,我們簡單介紹兩種:
方法一:使用git checkout -b
方法二:使用git branch <branchname> [<start-point>]
方法一其實是方法二的簡化版
要想更深入的了解checkout,我們需要了解checkout的作用機制。該命令的主要關聯目標其實是.git 文件夾下的HEAD文件,我們可以查看工程下面的.git文件夾:
該文件夾下HEAD文件記錄了當前HEAD的信息,繼續查看HEAD文件:
可以看到當前HEAD文件指向了refs/heads路徑下的master文件,該文件記錄了master分支最近的一次commit id,說明當前HEAD指向了master分支。如果我們將當前分支切換到newBranch 分支,我們再看HEAD文件:
可以看到HEAD文件內容指向了newBranch分支
用法1:
該命令主要用於檢出某一個指定文件。
如果不填寫commit id,則默認會從暫存區檢出該文件,如果暫存區為空,則該文件會回滾到最近一次的提交狀態。
例如:
當暫存區為空,如果我們想要放棄對某一個文件的修改,可以用這個命令進行撤銷:
如果填寫commit id(既可以是commit hash也可以是分支名稱還可以說tag,其本質上都是commit hash),則會從指定commit hash中檢出該文件。用於恢復某一個文件到某一個提交狀態。
用法2:
該命令是文章開頭部分所說的checkout常見用法的擴展,我們可以指定某一個分支或者某一次提交來創建新的分支,並且切換到該分支下,該命令相當於下面兩條命令的執行結果:
用法3:
該命令主要加了一個可選參數B,如果已經存在了同名的分支,使用 git checkout -b <new_branch>會提示錯誤,加入-B可選參數後會強制創建新分支,並且會覆蓋原來存在的同名分支。
用法4:
假如你的某個分支上,積累了無數次的提交,你也懶得去打理,列印出的log也讓你無力吐槽,那麼這個命令將是你的神器,它會基於當前所在分支新建一個赤裸裸的分支,沒有任何的提交歷史,但是當前分支的內容一一俱全。新建的分支,嚴格意義上說,還不是一個分支,因為HEAD指向的引用中沒有commit值,只有在進行一次提交後,它才算得上真正的分支。
用法5:
這個命令適用於在切換分支的時候,將當前分支修改的內容一起打包帶走,同步到切換的分支下。
有兩個需要注意的問題。
第一,如果當前分支和切換分支間的內容不同的話,容易造成沖突。
第二,切換到新分支後,當前分支修改過的內容就丟失了。
所以這個命令,慎用
用法6:
這個命令可以用來打補丁。這個命令主要用來比較兩個分支間的差異內容,並提供互動式的界面來選擇進一步的操作。這個命令不僅可以比較兩個分支間的差異,還可以比較單個文件的差異哦!
註:文中如有任何錯誤,請各位批評指正!