GIT 操作命令總結

簡介:GIT倉庫 包含兩個部分:1.工作區,2.版本庫(a暫存區,b當前分支)。

工作區也就是respository目錄,目錄中還有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。版本庫又包含了兩個部分:1 暫存區 2 當前分支

  1. git add命令實際上就是把要提交的所有修改放到暫存區(Stage),
  2. 執行git commit就可以一次性把暫存區的所有修改提交到分支。
  3. 每次修改,如果不用git add到暫存區,那就不會加入到commit中
  4. 要操作本地git倉庫,先要安裝git,然後在指定目錄創建git倉庫,執行相關操作(git目錄右鍵,GIT BASH Here)
//初始化一個Git倉庫
$ mkdir git
$ cd git
$ pwd 
$ git init

說明:
pwd命令:顯示當先目錄位置
git init 命令將當前目錄變成git可以管理的倉庫,當前目錄會多出一個.git的文件
//-------------------------------------------
	
//添加文件到Git倉庫
$ git add file1.txt  
$ git add file2.txt file3.txt  
$ git commit -m "add 3 files." 

說明:
git add 命令後面可以跟多個文件
git commit 命令 -m後面輸入的是本次提交的說名
//-------------------------------------------

//git倉庫狀態查看
$ git status
$ git diff readme.txt 
$ git log 
$ git log -pretty=oneline

說明:
git status命令查看當前倉庫的狀態,修改的內容有沒有提交
git diff <file> 命令用於對比文件距離上一次提交發生的變化
git log命令顯示從最近到最遠的提交日誌
git log --pretty=oneline 更整潔的展示
//-------------------------------------------

//Git撤銷修改
$ git checkout -- file1.txt
$ git reset HEAD file1.txt
$ git reset --hard HEAD^
$ git reset --hard HEAD~10
$ cat file1.txt
$ git log
$ git reflog

說明:
git checkout -- <file>命令,如果修改僅僅在工作區,那麼撤銷file在工作區的所有修改,恢復成上一次提交前的狀態
git reset HEAD <file>命令,如果修改已經add到了暫存區,那麼撤銷file在暫存區所有的修改恢復成工作區狀態,暫存區沒有任何內容,然後參照第一步撤銷修改
git reset --hard HEAD^【或者指定版本id,僅僅寫前幾位就好】命令,如果已經commit到了本地git倉庫,那麼回退到上一版本狀態,上一個版本就是HEAD^,上上一個版本就是HEAD^^,往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100
cat file1.txt 查看文件內容
git log 查看歷史修改版本,可以用來版本回退的時候,查看具體回退的版本id
git reflog 如果回退到歷史版本後,後悔,又想回到之前未來的版本,那麼reflog可以看到之前的版本號,進行回退操作
//-------------------------------------------

//git刪除文件
$ git rm readme.txt
$ git status 
$ git commit -m "remove file"

說明:
git rm readme.txt命令用於刪除指定文件,也可以在git倉庫手動刪除
git status命令查看修改記錄
//-------------------------------------------

//創建git的SSH key
$ ssh-keygen -t rsa -C "[email protected]"
$ Enter+Enter+Enter

說明:
ssh-keygen -t rsa -C "[email protected]"命令 創建SSH Key,你需要把郵件地址換成你自己的郵件地址,然後一路回車
一路回車
根據給定路徑,在用戶主目錄下,生成id_rsa和id_rsa.pub兩個文件,打開id_rsa.pub,可找到sshkey

爲什麼GitHub需要SSH Key呢?因爲GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。
當然,GitHub允許你添加多個Key。假定你有若干電腦,你一會兒在公司提交,一會兒在家裏提交,只要把每臺電腦的Key都添加到GitHub,就可以在每臺電腦上往GitHub推送了。
//-------------------------------------------

//Git倉庫創建,先建本地,後同步遠程
$ git remote add origin [email protected]:zhang_ying/learngit.git
$ git push -u origin master
$ git push origin master

說明:
git remote add origin [email protected]:zhang_ying/learngit.git 要關聯一個遠程庫,在你本地倉庫下運行命令。zhang_ying爲你的GitHub賬戶名,learngit爲你本地倉庫名,
git push -u origin master 把本地庫的所有內容第一次推送到遠程庫上
git push origin master //此後,只要本地作了提交,就可以通過命令進行推送最新修改:

由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
推送成功後,可以立刻在GitHub頁面中看到遠程庫的內容已經和本地一模一樣:

//Git倉庫創建,先建遠程,後同步本地
$ git clone [email protected]:zhang_ying/gitskills.git
$ git clone https://github.com/zhang_ying/gitskills.git 
$ cd gitskills
$ ls

git clone giturl 克隆遠程倉庫到本地指定目錄,[email protected]:zhang_ying/gitskills.git===https://github.com/zhang_ying/gitskills.git 
cd gitskills進入本地目錄gitskills查看
//-------------------------------------------

//創建並切換分支
$ git checkout -b dev
$ git branch dev
$ git checkout dev
$ git branch
//當dev分支做修改,修改完提交dev,切換回master,合併dev
$ git checkout master
$ git merge dev
$ git log --graphy
$ git log --graph --pretty=oneline --abbrev-commit
$ git branch -d dev 
//分支合併,禁用Fast forward模式
$ git merge --no-ff -m "merge with no-ff" dev


說明:
git checkout -b dev命令,相當於兩條命令,創建dev分支並切換到該分支上
git branch <name>創建指定分支
git checkout dev 命令,用於切換指定的分支上
git branch 命令,顯示git倉庫所有的分支
git merge dev 命令,將指定dev分支上的內容合併到當前分支上,dev分支可以刪除了,分支之間進行merge時,可能會發生衝突,需要你手動解決衝突後,然後提交。Git用<<<<<<<,=======,>>>>>>>標記出不同分支的內容,我們修改如下後保存:
git log --graph 命令,圖形化展示分支合併的情況
git log --graph --pretty=oneline --abbrev-commit 命令,整潔圖形化展示合併分支情況
git branch -d <name>命令,刪除指定分支,注意,如果要刪除當前所在的分支,首先要切換到其他分支上,不然刪除不了
git branch -D <name>命令,加入拉了一個分支,發現後面不需要了,分支的修改也沒有合併,那麼要丟棄會提示你未合併,可以通過這種方式強行丟棄一個沒有被合併過的分支

默認情況下,GIT會採用Fast forward模式,在這種模式下,如果刪除了分支,那麼會丟失分支的痕跡
可以強制禁用Fast forward模式,Git就會在merage時生成一個新的commit,這樣,即便刪除了分支,在分支歷史上也可以看到分支信息
//-------------------------------------------

//創建bug分支
$ git stash
$ git checkout master
$ git checkout -b bug
//bug 修改完成,提交分支,切換master,合併bug,刪除bug分支,恢復原有開發存儲的內容
$ git add *
$ git commit -m "bug is solved"
$ git checkout master
$ git merge bug
$ git branch -d bug
$ git stash pop 
說明:
git stash 當前分支,需求開發中,有緊急bug要修復,但當前分支需求尚未完成,不能提交,要拉新的bug分支,不能包含現在未完成的內容,當前修改要無痕跡存儲起來
//-------------------------------------------

//多人協作,分支代碼更新和推送
$ git remote
$ git remote -v
$ git clone [email protected]:michaelliao/learngit.git
$ git push origin master
$ git checkout -b dev origin/dev
$ git push origin dev
$ git pull
$ git branch --set-upstream-to=origin/dev dev
$ git pull
$ git push oigin dev


說明:
git remote 查看遠程庫的信息,
git remote -v 查看遠程庫的詳細信息
git clone [email protected]:michaelliao/learngit.git 克隆遠程庫的master分支到本地master
git push origin master 把該分支上的所有本地修改提交推送到遠程庫master分支
git checkout -b dev origin/dev 在本地創建和遠程分支對應的分支
git push origin dev 把該分支上的所有本地提交推送到遠程庫dev分支,如果此時多人都修改了改分支,那麼後一個提交的推送不上去
git pull 推送失敗時,需要將遠程dev的最新修改拉取一下到本地,如果有衝突,先輸入下方命令,再拉取
git branch --set-upstream-to=origin/dev dev 
git pull 此時拉取後,會看到衝突內容,解決衝突再推送
git push oigin dev 重新推送

//多人協作,四大步驟

1.首先,可以試圖用git push origin <branch-name>推送自己的修改;
2.如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;
3.如果合併有衝突,則解決衝突,並在本地提交;
4.沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!
//-------------------------------------------

//打標籤
$ git tag v1.0
$ git log
$ git tag v0.0 76dsgd
$ git tag
$ git show v0.0
$ git tag -d v0.0
$ git push origin v1.0 
$ git push origin --tags

說明:
git tag v1.0 爲當前提交的版本打標籤v1.0
git log 查看歷史提交記錄
git tag v0.0 76dsgd 根據歷史提交id,爲歷史紀錄打上標籤
git tag 顯示所有的標籤
git show v0.0 顯示指定標籤的數據
git tag -d v0.0 標籤不想要,刪除標籤,創建的標籤都只存儲在本地,不會自動推送到遠程。所以,打錯的標籤可以在本地安全刪除。
git push origin v1.0 要推送某個標籤到遠程
git push origin --tags 一次性推送全部尚未推送到遠程的本地標籤
$ git tag -d v0.9 刪除本地標籤
$ git push origin :refs/tags/v0.9 標籤已經推送到遠程,要刪除遠程標籤就麻煩一點,先從本地刪除:再刪除遠程標籤

 

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