Git安裝和常用命令總結

Windows10下安裝Git:

https://blog.csdn.net/qq_32786873/article/details/80570783

Windows10安裝Git總結:除了安裝路徑,全部按照默認設置。

 

Git介紹和學習使用Git:

https://www.liaoxuefeng.com/wiki/896043488029600

http://gitbook.liuhui998.com/index.html(這個我沒怎麼看過,不過更加官方)

其他部分命令學習歸納:

https://www.cnblogs.com/ydxblog/p/7988317.html

 

下面記錄一些常用的git命令和問題。<>中是要根據實際情況修改的變量名,[]中的是可選項。

本地基本操作。本地git有三個區:工作區,暫存區,版本庫。工作區內容先存到暫存區,再有暫存區提交到版本庫形成一個新版本。

//將所在目錄變成一個新的git倉庫。
$ git init

//將文件<filename>添加到本地暫存區。
$ git add <filename>

//將暫存區內容提交到倉庫/版本庫,<message>爲本次提交的說明,是一個字符串。
$ git commit -m <message>

//查看當前git的一些狀態。
$ git status

//版本號解釋
HEAD            //最新版本
HEAD^           //最新版本的上一個版本
HEAD^^          //最新版本的上兩個版本,有k個'^',就是上k個版本。
HEAD~<k>        //最新版本的上k個版本。這樣寫簡潔一點
72f18f66c22eddab9bad821bde2089ac553bd613    //這是個具體樣例,是個16進制數,是版本號的全寫。可以簡寫爲前幾個字符,一般至少4個字符,比如72f1,可能需要輸入更多。

//查看工作區和暫存區的區別。
$ git diff
//查看工作區和暫存區的文件<filename>的區別。
$ git diff <filename>
//查看工作區和版本庫版本<commit_id>的文件<filename>的區別
$ git diff <commit_id> -- <filename>
//查看暫存區和版本庫最新版本HEAD的區別。
$ git diff --cached
$ git diff --staged
//查看當前目錄和另外一個分支的差別。
$ git diff <branchname>
//比較歷史版本<commit_id1>和<commit_id2>的區別,<commit_id1>和<commit_id2>指的是兩個歷史版本的版本號。
$ git diff <commit_id1> <commit_id2>

//查看版本庫裏所有歷史版本,輸出的東西比較長不簡潔。
$ git log
//查看版本庫裏歷史版本,一個版本輸出一行。
$ git log --pretty=oneline
//查看版本庫裏歷史版本,格式化輸出%h是版本號的前7個字符、%an是作者名,%ar或者%ad是作者修訂時間(顯示格式不同),%s是提交說明。
$ git log --pretty=format:"%h - %an, %ar : %s"
//查看版本庫裏歷史版本,以分支合併圖的形式給出,一個版本輸出一行,僅顯示版本號的前7個字符。
$ git log --graph --pretty=oneline --abbrev-commit

//查看<commit_id>版本的改動
$ git show <commit_id>

//版本回退到<commit_id>版本
$ git reset --hard <commit_id>

//查看用過的git命令
$ git reflog

//撤銷對暫存區文件<filename>的修改,返回到和最新版本HEAD一樣
$ git reset HEAD <filename>
//撤銷對工作區文件<filename>的修改,返回到和暫存區一樣
$ git checkout -- <filename>
//連續使用上面兩步,能使工作區和版本庫最新版本HEAD的文件<filename>一樣

//刪除暫存區文件<filename>
$ git rm <filename>
//可以繼續使用git commit -m <message>刪除版本庫文件<filename>

 

本地倉庫分支使用

//查看所有本地分支
$ git branch

//創建新分支<branchname>
$ git branch <branchname>

//切換到<branchname>分支。下面兩種命令都可以。如果遠程倉庫不存在這個分支,則切換不成功,如果存在,則將遠程倉庫的該分支clone到本地。
$ git checkout <branchname>
$ git switch  <branchname>

//創建並切換到<branchname>分支。下面兩種命令都可以。
$ git checkout -b <branchname>
$ git switch -c <branchname>

//刪除本地分支<branchname>
$ git branch -d <branchname>
//強行刪除沒有被合併過的分支<branchname>
$ git branch -D <branchname>

//合併分支<branchname>到當前分支,默認Fast forward模式
$ git merge <branchname>
//如果合併成功就成功了,但<branchname>不會自動刪除。
//如果合併不成功,即產生衝突。Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,所以我們需要再手動打開文件修改衝突。之後纔好提交到暫存區中。

//合併分支<branchname>到當前分支,強制不使用Fast forward模式。這種合併方式會同時提交一個commit
$ git merge --no-ff dev -m "merge with no-ff"
//衝突解決方式和上面一樣

 

工作現場存儲和恢復

//工作現場的存儲
$ git stash

//查看存儲的所有工作現場
$ git stash list

//恢復某個工作現場,並刪除stash中該工作現場
//方法一,其中stashname的樣式爲stash@{0},0可變。
$ git stash apply [stashname]
$ git stash drop
//方法二
$ git stash pop [stashname]

//複製一個特定的提交到當前分支
$ git cherry-pick <commit_id>


//修復bug需要用到stash功能。
//修復bug時,我們會通過創建新的bug分支進行修復,然後合併,最後刪除;
//當手頭工作沒有完成時,先把工作現場git stash一下,然後去修復bug,修復後,再git stash pop,回到工作現場;
//在master分支上修復的bug,想要合併到當前dev分支,可以用git cherry-pick <commit_id>命令,把bug提交的修改“複製”到當前分支,避免重複勞動。

 

使用遠程倉庫。下面的origin爲遠程主機名,默認爲origin,如果遠程主機名不是這個則將origin改成應改的主機名。

//在本地主目錄下創建SSH Key,生成的key在主目錄的.ssh文件夾下,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,id_rsa.pub是公鑰。
$ cd ~
$ ssh-keygen -t rsa -C <[email protected]>
//在GitHub上自己的賬號里加入自己或別人的公鑰,實現SSH遠程傳輸。
登陸GitHub,在右上角點擊後打開"Settings",左邊選擇"SSH and GPG Keys",然後右側選擇"New SSH key",填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容,最後點擊"Add SSH key"。


//創建遠程倉庫
登陸GitHub,在右上角"+"下面選擇"New Repository",填入倉庫名(必填),倉庫描述,選擇公開或私密,選擇是否初始化一個README.md文件。不初始README.md文件的話,生成空的遠程倉庫,可以本地直接push已有的本地倉庫上去;初始化README.md文件的話,可以將該遠程倉庫pull下來後,從頭開始建立本地倉庫。

//關聯本地倉庫和遠程倉庫,最後一個參數實際就是倉庫地址最後加個.git。只不過這裏用ssh訪問,而不是用http訪問,所以地址前面的https://改爲git@。如果用https訪問,則地址前面不用改,只不過用https訪問,之後每次提交commit都要輸入倉庫擁有者的賬號和密碼。
$ git remote add origin [email protected]:<Github_username>/<repositoryname>.git

//查看遠程庫信息。加-v可以查看更詳細的信息。
$ git remote [-v]

//提交本地git倉庫分支<branch>到遠程倉庫,默認初始創建分支叫master。
//第一次提交時要加上-u參數,這樣Git不但會把本地的<branch>分支內容推送的遠程新的<branch>分支,還會把本地的<branch>分支和遠程的<branch>分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
//第一次提交時,還會有個警告,輸入yes並回車就好了。還有什麼bug的話可以參考https://blog.csdn.net/cly141220010/article/details/106443577。
$ git push [-u] origin <branch>
//提交本地<local_branch>分支作爲遠程的<remote_branch>分支
$ git push origin <local_branch>:<remote_branch>

//爲簡化上述提交命令,可以先通過下面的命令進行設置,默認將本地的<branch>分支的推送到origin/<branch>。設置完後在<branch>分支下就可以只用git push提交了。
$ git branch --set-upstream-to=origin/<branch> <branch>

//從遠程倉庫克隆到本地。
$ git clone [email protected]:<Github_username>/<repositoryname>.git

//從遠程拉取<remote_branch>分支。
$ git fetch origin <remote_branch>
//從遠程拉取<remote_branch>分支並與本地當前分支合併。
$ git pull origin <remote_branch>
//從遠程拉取<remote_branch>分支並與本地<local_branch>分支合併。
$ git pull origin <remote_branch>:<local_branch>

//查看遠程倉庫所有分支
$ git branch -r
//查看本地和遠程倉庫的所有分支
$ git branch -a
//刪除遠程倉庫分支<branch>。下面三種命令都可以,第二種命令實際上是將提交空分支到遠程的<branch>,等於刪除了遠程的<branch>分支。
$ git branch -r -d origin/<branch>
$ git push origin :<branch>
$ git push origin -d <branch>

//遠程倉庫版本回退。先本地分支版本回退,然後用下面命令強制推送到遠程分支。
$ git push -f

 

標籤

//給當前分支最新的commit打一個標籤
$ git tag <tagname>

//給某個commit打一個標籤
$ git tag <tagname> <commit_id>

//創建帶有說明的標籤,-a指定標籤名,-m指定說明文字
$ git tag -a <tagname> -m <message> <commit_id>

//查看所有標籤
$ git tag

//查看某個標籤的信息
$ git show <tagname>

//刪除標籤
$ git tag -d <tagname>

//推送一個標籤到遠程
$ git push origin <tagname>
//推送所有標籤到遠程
$ git push origin --tags

//刪除一個遠程標籤。需要兩步操作。
$ git tag -d <tagname>
$ git push origin :refs/tags/<tagname>

 

一般開發中各個分支的作用:

git有個最佳實踐,master是主分支,用來做正式發佈版之後的保留歷史,其他分支包括dev用來做正常開發,多個feature用來做某些特性功能,release用來做發佈版歷史,每次發佈都是用release打包,hotfix用來做發佈版之後的一些及時迭代修復bug的工作。

另外的,也有下面這個標準的:

Production分支(主線分支用於發版,不會直接改)

Master分支,這個分支只能從其他分支合併,不能在這個分支直接修改

Develop分支(開發分支)
這個分支是我們是我們的主開發分支,包含所有要發佈到下一個Release的代碼,這個主要合併與其他分支,比如Feature分支

Feature分支(新功能分支)
這個分支主要是用來開發一個新的功能,一旦開發完成,我們合併回Develop分支進入下一個Release 

Release分支(偏向測試)
當你需要一個發佈一個新Release的時候,我們基於Develop分支創建一個Release分支,完成Release後,我們合併到Master和Develop分支

Hotfix分支(緊急bug發佈)
當我們在Production發現新的Bug時候,我們需要創建一個Hotfix, 完成Hotfix後,我們合併回Master和Develop分支,所以Hotfix的改動會進入下一個Release

 

多人協作的工作模式:

  1. 首先,可以試圖用git push origin <branch-name>推送自己的修改;

  2. 如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;

  3. 如果合併有衝突,則解決衝突,並在本地提交;

  4. 沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!

如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to=origin/<branchname> <branchname>

這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

 

現總結到“標籤管理”完爲止,之後看時間再繼續總結。

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