Git工作流程
Git工作區、暫存區和版本庫
工作區:就是你在電腦裡能看到的目錄。暫存區:英文叫 stage 或 index。一般存放在 .git 目錄下的 index 文件(.git/index)中,所以我們把暫存區有時也叫作索引(index)。版本庫:工作區有一個隱藏目錄 .git,這個不算工作區,而是 Git 的版本庫。
git add,暫存區目錄樹更新,工作區修改【或新增】的文件內容被寫入到對象庫的一個新對象中,而該對象的ID被記錄在暫存區的文件索引中。git commit,暫存區的目錄樹寫到版本庫(對象庫)中,master 分支會做相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。git reset HARD,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,但是工作區不受影響。git rm --cached <file>,直接從暫存區刪除文件,工作區則不做出改變。git checkout .或git checkout -- <file>,用暫存區全部或指定的文件替換工作區的文件。這個操作很危險,會清除工作區中未添加到暫存區的改動。git checkout HEAD .或git checkout HEAD <file>,用 HEAD 指向的 master 分支中的全部或者部分文件替換暫存區和以及工作區中的文件。這個命令也是極具危險性的,因為不但會清除工作區中未提交的改動,也會清除暫存區中未提交的改動。Git基本操作
workspace:工作區staging area:暫存區,緩存區local repository:本地倉庫remote repository:遠程倉庫基本操作流程:
git init # 初始化倉庫,生成.git目錄git add <file> # 添加文件到暫存區git commit -m"<message>" # 將暫存區的內容添加到本地倉庫中Git常用命令:創建倉庫
git init
初始化倉庫
git init # 在當前目錄下初始化git倉庫 git init newrepo # 在newrepo目錄下初始化git倉庫在執行完成 git init 命令後,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據,其他的項目目錄保持不變。
git clone
下載項目
git clone <repo> # 克隆git倉庫的項目到當前目錄git clone <repo> <directory> # 克隆git倉庫的項目到指定目錄git config
設置git的配置信息
git config # 顯示git的配置信息# 針對系統上的所有倉庫,修改提交代碼的用戶信息git config --global user.name "summerday"git config --global user.email 13279076@qq.comGit常用命令:提交與修改
git add
添加文件到倉庫
git add [file1] [file2] # 添加文件file1和file2進入暫存區git add [dir] # 添加dir目錄進入暫存區,包括子目錄git add . # 添加當前目錄下所有文件到暫存區$ touch README.md$ git add README.mdgit status
查看在你上次提交之後是否有對文件進行再次修改。
$ git statusOn branch masterNo commits yetChanges to be committed: (use "git rm --cached <file>..." to unstage) new file: README.md通常使用-s獲得簡短的輸出結果。
$ git status -sA README.md # A 表示新添加git diff
比較文件在暫存區和工作區的差異,主要應用場景
git diff [file] # 尚未緩存的改動git diff --chached [file] # 查看已緩存的改動git diff --stat [file] #顯示摘要而非整個diff前置條件:已經將README.md加入到暫存區。
vim README.md # 編輯 modified by summerday$ git status -sAM README.md$ git diff # 顯示暫存區和工作區的差異diff --git a/README.md b/README.mdindex e69de29..4dc8994 100644--- a/README.md+++ b/README.md@@ -0,0 +1 @@+modified by summerday!$ git diff --cached README.md # 顯示暫存區和上一次提交(commit)的差異diff --git a/README.md b/README.mdnew file mode 100644index 0000000..e69de29$ git diff --stat README.md #顯示摘要而非整個diffREADME.md | 1 +1 file changed, 1 insertion(+)git commit
將暫存區內容添加到本地倉庫中。
git commit -m [message]git commit [file1] [file2] -m [message]git commit -am [message] # add + commit git revert <commit> # 撤銷指定的修改$ git commit -m "first commit !"[master (root-commit) b81d562] first commit ! 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md $ git statusOn branch masternothing to commit, working tree cleannothing to commit, working tree clean,表示我們在最近一次提交之後,沒有做任何改動,是乾淨的工作目錄。
可以使用-a選項跳過git add。
$ vim README.md # add : modified again!$ git statusOn branch masterChanges not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: README.mdno changes added to commit (use "git add" and/or "git commit -a")$ git commit -am "modify and commit again!"[master 4c3121a] modify and commit again! 1 file changed, 1 insertion(+)git reset
回退版本,可以指定退回某一次提交的版本
git reset [--soft | --mixed | --hard] [HEAD] --mixed 為默認,可以不用帶該參數,用於重置暫存區的文件與上一次的提交(commit)保持一致,工作區文件內容保持不變。
git reset [HEAD]git reset --mixed [HEAD]$ git reset HEAD # 取消之前git add添加到暫存區的內容$ git reset HEAD^ # 回退所有內容到上一版本 git reset HEAD~1$ git reset HEAD^ 1.txt # 回退1.txt文件的版本到上一版本$ git reset [version] # 回退到指定版本--soft,--mixed,--head的區別可以對照:git reset soft,hard,mixed之區別深解,總結如下:git reset命令是用來將當前branch重置到另外一個commit的,而這個動作可能會將index以及work tree同樣影響,而三個參數表示影響程度上的不同:--soft:僅僅將頭指針恢復,【已經add進暫存區的內容以及工作空間的所有東西都不變】。--mixed:將頭指針恢復,已經add進暫存區的內容也會丟失,【工作空間的代碼什麼的是不變的,可以根據情況再次進行add,commit操作】。--hard:一切就全都恢復了,頭指針恢復,已經add進暫存區的內容也會丟失,代碼什麼的也恢復到以前狀態,所以該參數需謹慎使用。
HEAD說明
^表示數字表示含義HEADHEAD~0當前版本HEAD^HEAD~1上一版本HEAD^^HEAD~2上上個版本
git rm
刪除文件
git rm <file> # 從暫存區和工作區中刪除文件git rm -f <file> # 如果刪除之前修改過,並已經放到暫存區中,需要強制刪除git rm -cached <file> # 把文件從暫存區移除,但仍然希望保留在當前工作目錄中git mv
移動或重命名工作區文件
git mv [file] [newfile] # 移動或重命名一個文件、目錄或軟連結git mv -f [file] [newfile] # 如果新文件名已經存在,強制使用-fGit常用命令:日誌信息
git log
查看歷史提交記錄
$ git logcommit bcc72cf028fa25cd8cebf7e310ebfe18d848d9e3 (HEAD -> master)Author: xxxDate: Mon Nov 30 14:40:24 2020 +0800 updatecommit 272df45cb2357655f07576bc59bd92aac9c9fe96Author: xxxDate: Mon Nov 30 12:50:22 2020 +0800 first commit !$ git log --oneline # 查看簡潔版本bcc72cf (HEAD -> master) update272df45 first commit !b81d562 first commit !$ git log --graph # 顯示拓撲圖結構,顯示何時工作分叉、又何時歸併。$ git log --reverse --oneline # 逆向顯示$ git log --author=summerday --oneline -5 # 查看最近5行作者為summerday的提交記錄$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges # 三周前且在四月十八日之後的所有提交 --no-merges 選項以隱藏合併提交git blame
查看文件的修改記錄
$ git blame README.md 272df45c (huayuhao 2020-11-30 12:50:22 +0800 1) modified by summerday!bcc72cf0 (huayuhao 2020-11-30 14:40:24 +0800 2)bcc72cf0 (huayuhao 2020-11-30 14:40:24 +0800 3) reset test!git show
顯示信息
git show [version] # 顯示某個提交的詳細內容git show HEAD # 顯示HEAD提交日誌git show HEAD^ # 顯示HEAD的父(上一個版本)的提交日誌 Git常用命令:遠程操作
git remote
遠程倉庫操作
$ git remote -vorigin git@xxx.git (fetch)origin git@xxx.git (push)# origin為遠程地址的別名git remote show [remote] # 顯示某個遠程倉庫的信息git remote add [shortname] [url] #添加遠程版本庫 shortname為本地的版本庫# git remote add origin xxx.gitgit remote rm name # 刪除遠程倉庫git remote rename old_name new_name # 修改倉庫名git fetch
從遠程獲取代碼庫,需要手動merge。
git fetch origin# 執行 git fetch 之後緊接著執行 git merge 遠程分支到你所在的任意分支git merge origin/mastergit pull
從遠程獲取代碼並合併本地的版本,相當於git fetch + git merge FETCH_HEAD
# 格式: git pull <遠程主機名> <遠程分支名>:<本地分支名>git pullgit pull origingit pull origin master:brantest # 將遠程主機 origin 的 master 分支拉取過來,與本地的 brantest 分支合併git pull origin master # 遠程分支是與當前分支合併,則冒號後面的部分 可以省略git push
將本地的分支版本上傳到遠程並合併。
# 格式 : git push <遠程主機名> <本地分支名>:<遠程分支名># git push <遠程主機名> <本地分支名> 如果本地分支名與遠程分支名相同,則可以省略冒號git push origin mastergit push --force origin master # 如果本地版本與遠程版本有差異,但又要強制推送git push origin --delete master # 刪除主機但分支可以使用 --delete 參數Git標籤管理
git tag v1.0 # 最新一次提交打上(HEAD)"v1.0"的標籤# 之後我們執行 git log --decorate 就可以看到我們新增的標籤了。git tag # 查看所有的標籤git tag -d v1.0 # 刪除標籤git show v1.0 # 查看此版本修改的內容Git分支管理
幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味著你可以從開發主線上分離開來,然後在不影響主線的同時繼續工作。
git branch (branchname) # 創建分支git checkout (branchname) # 切換分支git merge [otherbranches] # 合併到當前分支git branch # 列出分支git checkout -b (branchname) # 創建分支並立即切換到該分支下git branch -d (branchname) #刪除分支原文連結:https://www.cnblogs.com/summerday152/p/14069968.html
如果覺得本文對你有幫助,可以轉發關注支持一下