Git官網
Git,代碼倉庫管理系統,分布式版本控制軟件
網站服務:Git,ai導航。
Git官網,代碼倉庫管理系統,分布式版本控制軟件
什么是Git?
git是一個分布式版本控制軟件,最初由林納斯·托瓦茲創作,于2005年以GPL許可協議發布。最初目的是為了更好地管理Linux內核開發而設計。應注意的是,這與GNU Interactive Tools不同。 git最初的開發動力來自于BitKeeper和Monotone。
Git官網: https://git-scm.com/
Git詳細介紹
Git是一種分布式版本控制軟件,是由林納斯·托瓦茲在2005年發布的。它可以幫助開發者跟蹤項目的更改歷史記錄,并允許多人在同一代碼庫上協作。在Git中,每個人都有自己的本地副本,可以輕松地將更改同步到主存儲庫中。這種分布式系統的優點在于它可以避免出現單點故障,即使主存儲庫不可用,開發人員也可以繼續工作,這在中心化版本控制系統中是不可能的。
除了分布式系統的優勢,Git還提供了許多其他功能,包括分支和合并。分支允許開發者在不影響主代碼庫的情況下開發新的特性或解決問題。合并允許開發人員將不同的代碼分支合并為一個整體,這是一個必要的步驟,以確保所有更改都被正確地合并到主代碼庫中。
此外,Git還提供了其他功能,如存檔、鉤子和沖突解決。存檔允許開發人員創建特定版本的存檔文件,以便將它們與其他人共享或備份。鉤子是一種機制,可以在特定發生時運行自定義腳本。沖突解決是一種解決多人同時更改同一文件的方法,以確保所有更改都被正確地合并。
???git安裝
在使用Git前我們需要先安裝 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平臺上運行。
Git 各平臺安裝包下載地址為:http://git-scm.com/downloads
本文在windows系統安裝git,安裝地址:https://npm.taobao.org/mirrors/git-for-windows/,安裝流程不啰嗦,下載完后一直下一步即可。具體下載安裝教程可參考 Git 安裝配置 – (鏈接地址:https://www.runoob.com/git/git-install-setup.html)
??1、git命令大全(整理成表格,方便查閱)
創建倉庫命令
命令 | 說明 |
---|---|
git init |
初始化倉庫,在當前目錄新建一個Git代碼庫,基本上是創建一個具有objects ,refs/head ,refs/tags 和模板文件的.git 目錄。 |
git clone [url] |
拷貝一份遠程倉庫,也就是下載一個項目和它的整個代碼歷史。 |
配置
命令 | 說明 |
---|---|
git config --list |
顯示當前的Git配置 |
git config -e [–global] | 編輯Git配置文件。 |
git config [–global] user.name “[name]” git config [–global] user.email “[email address]” |
設置提交代碼時的用戶信息 |
增加 / 刪除文件
命令 | 說明 |
---|---|
git add [file1] [file2] ... |
添加指定文件到暫存區 |
git add [dir] | 添加指定目錄到暫存區,包括子目錄 |
git add . | 添加當前目錄的所有文件到暫存區 |
git add -p | 添加每個變化前,都會要求確認 對于同一個文件的多處變化,可以實現分次提交 |
git rm [file1] [file2] … | 刪除工作區文件,并且將這次刪除放入暫存區 |
git rm –cached [file] | 停止追蹤指定文件,但該文件會保留在工作區 |
git mv [file-original] [file-renamed] | 改名文件,并且將這個改名放入暫存區 |
代碼提交
命令 | 說明 |
---|---|
git commit -m [message] |
提交暫存區到倉庫區 |
git commit [file1] [file2] … -m [message] | 提交暫存區的指定文件到倉庫區 |
git commit -a | 提交工作區自上次commit之后的變化,直接到倉庫區 |
git commit -v | 提交時顯示所有diff信息 |
git commit –amend -m [message] | 使用一次新的commit,替代上一次提交 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息 |
git commit –amend [file1] [file2] … | 重做上一次commit,并包括指定文件的新變化 |
分支
命令 | 說明 |
---|---|
git branch | 列出所有本地分支 |
git branch -r | 列出所有遠程分支 |
git branch -a | 列出所有本地分支和遠程分支 |
git branch [branch-name] | 新建一個分支,但依然停留在當前分支 |
git checkout -b [branch] | 新建一個分支,并切換到該分支 |
git branch [branch] [commit] | 新建一個分支,指向指定commit |
git branch –track [branch] [remote-branch] | 新建一個分支,與指定的遠程分支建立追蹤關系 |
git checkout [branch-name] | 切換到指定分支,并更新工作區 |
git checkout – | 切換到上一個分支 |
git branch –set-upstream [branch] [remote-branch] | 建立追蹤關系,在現有分支與指定的遠程分支之間 |
git merge [branch] | 合并指定分支到當前分支 |
git cherry-pick [commit] | 選擇一個commit,合并進當前分支 |
git branch -d [branch-name] | 刪除分支 |
git push origin –delete [branch-name] 或 git branch -dr [remote/branch] |
刪除遠程分支 |
標簽
命令 | 說明 |
---|---|
git tag | 列出所有tag |
git tag [tag] | 新建一個tag在當前commit |
git tag [tag] [commit] | 新建一個tag在指定commit |
git tag -d [tag] | 刪除本地tag |
git push origin :refs/tags/[tagName] | 刪除遠程tag |
git show [tag] | 查看tag信息 |
git push [remote] [tag] | 提交指定tag |
git push [remote] –tags | 提交所有tag |
git checkout -b [branch] [tag] | 新建一個分支,指向某個tag |
查看信息和歷史
命令 | 說明 |
---|---|
git status | 顯示有變更的文件 |
git log | 顯示當前分支的版本歷史 |
git log –stat | 顯示commit歷史,以及每次commit發生變更的文件 |
git log -S [keyword] | 搜索提交歷史,根據關鍵詞 |
git log [tag] HEAD –pretty=format:%s | 顯示某個commit之后的所有變動,每個commit占據一行 |
git log [tag] HEAD –grep feature | 顯示某個commit之后的所有變動,其”提交說明”必須符合搜索條件 |
git log –follow [file] 或 git whatchanged [file] |
顯示某個文件的版本歷史,包括文件改名 |
git log -p [file] | 顯示指定文件相關的每一次diff |
git log -5 –pretty –oneline | 顯示過去5次提交 |
git shortlog -sn | 顯示所有提交過的用戶,按提交次數排序 |
git blame [file] | 顯示指定文件是什么人在什么時間修改過 |
git diff | 顯示暫存區和工作區的差異 |
git diff –cached [file] | 顯示暫存區和上一個commit的差異 |
git diff HEAD | 顯示工作區與當前分支最新commit之間的差異 |
git diff [first-branch]…[second-branch] | 顯示兩次提交之間的差異 |
git diff –shortstat “@{0 day ago}” | 顯示今天你寫了多少行代碼 |
git show [commit] | 顯示某次提交的元數據和內容變化 |
git show –name-only [commit] | 顯示某次提交發生變化的文件 |
git show [commit]:[filename] | 顯示某次提交時,某個文件的內容 |
git reflog | 顯示當前分支的最近幾次提交 |
遠程同步
命令 | 說明 |
---|---|
git fetch [remote] | 下載遠程倉庫的所有變動(遠程新增或刪除分支都能顯示) |
git remote -v | 顯示所有遠程倉庫 |
git config [–global] user.name “[name]” git config [–global] user.email “[email address]” |
設置提交代碼時的用戶信息 |
git remote show [remote] | 顯示某個遠程倉庫的信息 |
git remote add [shortname] [url] | 增加一個新的遠程倉庫,并命名 |
git pull [remote] [branch] | 取回遠程倉庫的變化,并與本地分支合并 |
git push [remote] [branch] | 上傳本地指定分支到遠程倉庫 |
git push [remote] –force | 強行推送當前分支到遠程倉庫,即使有沖突 |
git push [remote] –all | 推送所有分支到遠程倉庫 |
撤銷
命令 | 說明 |
---|---|
git checkout [file] |
恢復暫存區的指定文件到工作區 |
git checkout [commit] [file] | 恢復某個commit的指定文件到暫存區和工作區 |
git checkout . | 恢復暫存區的所有文件到工作區 |
git reset [file] | 重置暫存區的指定文件,與上一次commit保持一致,但工作區不變 |
git reset –hard | 重置暫存區與工作區,與上一次commit保持一致 |
git reset [commit] | 重置當前分支的指針為指定commit,同時重置暫存區,但工作區不變 |
git reset –hard [commit] | 重置當前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一致 |
git reset –keep [commit] | 重置當前HEAD為指定commit,但保持暫存區和工作區不變 |
git revert [commit] | 新建一個commit,用來撤銷指定commit 后者的所有變化都將被前者抵消,并且應用到當前分支 |
git stash | 暫時將未提交的變化移除,稍后再移入 |
git stash pop | 暫時將未提交的變化移除,稍后再移入 |
其他
命令 | 說明 |
---|---|
git archive | 生成一個可供發布的壓縮包 |
git repack | 打包未歸檔文件 |
git count-objects | 計算解包的對象數量 |
git help 或 git –help |
Git幫助,查看git相關命令,如果想看某個特定命令的具體細節,可使用git [命令] –help,如 git commit –help 表示查看提交相關命令的幫助 |
??2、Git操作流程
git的操作往往都不是一個命令能解決的,就比如下圖所示,單單代碼提交和同步代碼,就涉及到6個命令的組合。
看完了git命令大全,這節列舉了實際操作中的不同場景,為大家一一解答如何組合不同git命令,進行git的操作流程。
-
代碼提交和同步代碼 -
代碼撤銷和撤銷同步
??1、代碼提交和同步代碼
-
第零步: 工作區與倉庫保持一致 -
第一步: 文件增刪改,變為已修改狀態 -
第二步: git add ,變為已暫存狀態
$?git?status
$?git?add?--all?#?當前項目下的所有更改
$?git?add?.??#?當前目錄下的所有更改
$?git?add?xx/xx.py?xx/xx2.py??#?添加某幾個文件
-
第三步: git commit,變為已提交狀態
$?git?commit?-m"<這里寫commit的描述>"
-
第四步: git push,變為已推送狀態
$?git?push?-u?origin?master?#?第一次需要關聯上
$?git?push?#?之后再推送就不用指明應該推送的遠程分支了
$?git?branch?#?可以查看本地倉庫的分支
$?git?branch?-a?#?可以查看本地倉庫和本地遠程倉庫(遠程倉庫的本地鏡像)的所有分支
在某個分支下,我最常用的操作如下
$?git?status
$?git?add?-a
$?git?status
$?git?commit?-m?'xxx'
$?git?pull?--rebase
$?git?push?origin?xxbranch`?
??2、代碼撤銷和撤銷同步
一、已修改,但未暫存
$?git?diff?#?列出所有的修改
$?git?diff?xx/xx.py?xx/xx2.py?#?列出某(幾)個文件的修改
$?git?checkout?#?撤銷項目下所有的修改
$?git?checkout?.?#?撤銷當前文件夾下所有的修改
$?git?checkout?xx/xx.py?xx/xx2.py?#?撤銷某幾個文件的修改
$?git?clean?-f?#?untracked狀態,撤銷新增的文件
$?git?clean?-df?#?untracked狀態,撤銷新增的文件和文件夾
#?Untracked?files:
#??(use?"git?add?<file>..."?to?include?in?what?will?be?committed)
#
#?xxx.py
二、已暫存,未提交
這個時候已經執行過git add,但未執行git commit,但是用git diff已經看不到任何修改。因為git diff檢查的是工作區與暫存區之間的差異。
$?git?diff?--cached?#?這個命令顯示暫存區和本地倉庫的差異
$?git?reset?#?暫存區的修改恢復到工作區
$?git?reset?--soft?#?與git?reset等價,回到已修改狀態,修改的內容仍然在工作區中
$?git?reset?--hard?#?回到未修改狀態,清空暫存區和工作區
git reset –hard 操作等價于 git reset 和 git checkout 2步操作
三、已提交,未推送
執行完commit之后,會在倉庫中生成一個版本號(hash值),標志這次提交。之后任何時候,都可以借助這個hash值回退到這次提交。
$?git?diff?<branch-name1>?<branch-name2>?#?比較2個分支之間的差異
$?git?diff?master?origin/master?#?查看本地倉庫與本地遠程倉庫的差異
$?git?reset?--hard?origin/master?#?回退與本地遠程倉庫一致
$?git?reset?--hard?HEAD^?#?回退到本地倉庫上一個版本
$?git?reset?--hard?<hash?code>?#?回退到任意版本
$?git?reset?--soft/git?reset?#?回退且回到已修改狀態,修改仍保留在工作區中。?
四、已推送到遠程
$?git?push?-f?orgin?master?#?覆蓋遠程分支
$?git?push?-f?#?如果之前已經用?-u?關聯過,則可省略分支名
慎用,一般情況下,本地分支比遠程要新,所以可以直接推送到遠程,但有時推送到遠程后發現有問題,進行了版本回退,舊版本或者分叉版本推送到遠程,需要添加 -f參數,表示覆蓋。
???3、其它常見操作
一、關聯遠程倉庫
-
如果還沒有Git倉庫,你需要
$?git?init
-
如果你想關聯遠程倉庫
$?git?remote?add?<name>?<git-repo-url>
#?例如?git?remote?add?origin?https://github.com/xxxxxx?#?是遠程倉庫的名稱,通常為?origin?
-
如果你想關聯多個遠程倉庫
$?git?remote?add?<name>?<another-git-repo-url>
#?例如?git?remote?add?coding?https://coding.net/xxxxxx?
-
忘了關聯了哪些倉庫或者地址
$?git?remote?-v
#?origin?https://github.com/gzdaijie/koa-react-server-render-blog.git?(fetch)
#?origin?https://github.com/gzdaijie/koa-react-server-render-blog.git?(push)?
-
如果遠程有倉庫,你需要clone到本地
$?git?clone?<git-repo-url>
#?關聯的遠程倉庫將被命名為origin,這是默認的。
-
如果你想把別人倉庫的地址改為自己的
$?git?remote?set-url?origin?<your-git-url>
二、 切換分支
新建倉庫后,默認生成了master分支
-
如果你想新建分支并切換
$?git?checkout?-b?<new-branch-name>
#?例如?git?checkout?-b?dev
#?如果僅新建,不切換,則去掉參數?-b
-
看看當前有哪些分支
$?git?branch
#?*?dev
#???master?#?標*號的代表當前所在的分支
-
看看當前本地&遠程有哪些分支
$?git?branch?-a
#?*?dev
#???master
#???remotes/origin/master
-
切換到現有的分支
$?git?checkout?master
-
你想把dev分支合并到master分支
$?git?merge?<branch-name>
#?例如?git?merge?dev
-
你想把本地master分支推送到遠程去
$?git?push?origin?master
#?你可以使用git push -u origin master將本地分支與遠程分支關聯,之后僅需要使用git push即可。
-
遠程分支被別人更新了,你需要更新代碼
$?git?pull?origin?<branch-name>
#?之前如果push時使用過-u,那么就可以省略為git?pull
-
本地有修改,能不能先git pull
$?git?stash?#?工作區修改暫存
$?git?pull??#?更新分支
$?git?stash?pop?#?暫存修改恢復到工作區??
三、 撤銷操作
-
恢復暫存區文件到工作區
$?git?checkout?<file-name>?
-
恢復暫存區的所有文件到工作區
$?git?checkout?.
-
重置暫存區的某文件,與上一次commit保持一致,但工作區不變
$?git?reset?<file-name>
-
重置暫存區與工作區,與上一次commit保持一致
$?git?reset?--hard?<file-name>
#?如果是回退版本(commit),那么file,變成commit的hash碼就好了。?
-
去掉某個commit
$?git?revert?<commit-hash>
#?實質是新建了一個與原來完全相反的commit,抵消了原來commit的效果?
-
reset回退錯誤恢復
$?git?reflog?#查看最近操作記錄
$?git?reset?--hard?HEAD{5}?#恢復到前五筆操作
$?git?pull?origin?backend-log?#再次拉取代碼
四、版本回退與前進
-
查看歷史版本
$?git?log
-
你可能覺得這樣的log不好看,試試這個
$?git?log?--graph?--decorate?--abbrev-commit?--all
-
檢出到任意版本
$?git?checkout?a5d88ea
#?hash碼很長,通常6-7位就夠了
-
遠程倉庫的版本很新,但是你還是想用老版本覆蓋
$?git?push?origin?master?--force
#?或者?git?push?-f?origin?master
-
覺得commit太多了? 多個commit合并為1個
$?git?rebase?-i?HEAD~4
#?這個命令,將最近4個commit合并為1個,HEAD代表當前版本。將進入VIM界面,你可以修改提交信息。推送到遠程分支的commit,不建議這樣做,多人合作時,通常不建議修改歷史。?
-
想回退到某一個版本
$?git?reset?--hard?<hash>
#?例如?git?reset?--hard?a3hd73r
#?--hard代表丟棄工作區的修改,讓工作區與版本代碼一模一樣,與之對應,--soft參數代表保留工作區的修改。
-
想回退到上一個版本,有沒有簡便方法?
$?git?reset?--hard?HEAD^?
-
回退到上上個版本呢?
$?git?reset?--hard?HEAD^^
# HEAD^^可以換作具體版本hash值。
-
回退錯了,能不能前進呀
$?git?reflog
#?這個命令保留了最近執行的操作及所處的版本,每條命令前的hash值,則是對應版本的hash值。使用上述的git checkout 或者 git reset命令?則可以檢出或回退到對應版本。
-
剛才commit信息寫錯了,可以修改嗎
$?git?commit?--amend
-
看看當前狀態吧
$?git?status?
五、配置屬于你的Git
-
看看當前的配置
$?git?config?--list?
-
估計你需要配置你的名字
$?git?config?--global?user.name?"<name>
#??--global為可選參數,該參數表示配置全局信息`?
-
希望別人看到你的commit可以聯系到你
$?git?config?--global?user.email?"<email?address>"?
-
有些命令很長,能不能簡化一下
$?git?config?--global?alias.logg?"log?--graph?--decorate?--abbrev-commit?--all"
#?之后就可以開心地使用?git?log了
Git網址入口
OpenI小編發現Git網站非常受用戶歡迎,請訪問Git網址入口試用。
數據統計
數據評估
本站OpenI提供的Git都來源于網絡,不保證外部鏈接的準確性和完整性,同時,對于該外部鏈接的指向,不由OpenI實際控制,在2023年 9月 7日 下午3:19收錄時,該網頁上的內容,都屬于合規合法,后期網頁的內容如出現違規,可以直接聯系網站管理員進行刪除,OpenI不承擔任何責任。