前言:本篇博客詳細介紹了專案管理工具 Git 的下載安裝、環境變數配置、使用以及一些常用命令,參考了網上一些博主的介紹,有些博客只介紹下載安裝,或者只介紹 Git 命令,沒有綜合到一起,通過閱讀此博文,能夠讓對 Git 的配置與使用達到比較通達的理解,如果喜歡,請點贊收藏,
博文目錄:
- 一、Git 下載安裝
- 二、配置環境變數
- 三、配置 GitHub
- 四、IDEA 中配置Git
- 五、Git 命令總結
- 六、Git 使用問題記錄
一、Git 下載安裝
1、官網 Git 下載
官網Git下載(按住Ctrl然后點擊鏈接成功跳轉)
根據自己的需要選擇 macOS、Windows、Linux/Unix,或者直接點擊右邊電腦中 Downloads for Windows 跳轉到下載頁面,

然后點擊 Click here to download 下載版本,或者也可以選擇 32 位或者 64 位

2、Git 安裝步驟
Git 具體安裝步驟參考下邊鏈接,作者 maanlong ,安裝步驟介紹地較為詳細,不只是 Next 一路油門踩到底,該篇博客中還會說明每到一步以后步驟中的選項是什么意思,是否建議選擇等,因此在此較為推薦:
Windows系統Git安裝教程(詳解Git安裝程序)
版本一直在迭代,安裝步驟大差不差,完全值得參考借鑒,安裝完成以后,在桌面上右鍵選擇:Git Bash Here會彈出下邊的命令列框,在 $ 后邊輸入命令 git -v 會出現當前你所安裝的 Git 的版本號,

二、配置環境變數
與其他的軟體類似,Git 配置環境變數也是同樣的操作步驟:
- 右鍵電腦 → 屬性 → 高級系統設定 → 環境變數 → 系統變數 → Path → 然后添加 Git 安裝目錄
C:\Program Files\Git\bin
- 配置好環境變數以后,在命令提示符(Win + R)中輸入
git會彈出以下界面,說明安裝配置成功

三、配置 GitHub
相信對于軟體開發人員來說,GitHub 這個詞語必然是耳熟能詳,它是一個面向開源及私有軟體專案的托管平臺,因為只支持 Git 作為唯一的版本庫格式進行托管,故名 GitHub,
Git 與 GitHub 間的關系如下圖所示
上邊安裝的 Git 是版本管理工具,而 GitHub 是一個代碼托管平臺,就是將自己所要提交的代碼通過 Git 工具提交到 GitHub 平臺上,用于每次的增刪改查,并且同一個專案組成員都可以拉取專案代碼,互相提交,避免沖突,
想要通過 Git 將代碼提交到 GitHub 上,就需要事先進行一些配置,這樣才能夠與 GitHub 服務器進行連接,
1、添加 SSH key 原因
GitHub 管理專案的時候,對于本地或者遠程檔案操作可以用 HTTPS 或者 SSH 進行 clone 和 push,兩者的區別在于:
-
使用 HTTPS 可隨意 clone 或者 push 專案到 GitHub,不管誰是專案的擁有者;而使用 SSH 操作必須是專案的擁有者或者管理員,且需要添加 SSH key,否則無法 clone
-
使用 HTTPS url 在 push 時需要驗證用戶名和密碼;使用 SSH 在 push 時可設定成無用戶名密碼,相對方便
-
GitHub 允許添加多個 Key,假定你有若干電腦,一會兒在公司提交,一會兒在家里提交,這樣只要把每臺電腦的 Key 都添加到 GitHub ,就可以在每臺電腦上往 GitHub 推送了
2、生成 SSH key 步驟
- GitHub 官網上注冊一個賬號,然后桌面右鍵選擇 Git Bash Here,進行賬號配置,命令:
# 配置用戶名("username"是自己GitHub上的用戶名)
$ git config --global user.name "username"
# 配置郵箱("[email protected]"是注冊GitHub賬號時所用的郵箱)
$ git config --global user.email "[email protected]"
- 執行完成上述命令以后,查看是否配置成功,如果成功,會顯示所配置的用戶名和郵箱,命令:
$ git config --global --list
- 檢查電腦是否已經有 SSH key,在 Git Bash Here 中輸入命令:
$ cd ~/.ssh
# 輸完上邊命令回車
$ ls
這兩個命令就是檢查是否已經存在 id_rsa(私鑰) 或 id_dsa.pub(公鑰) 檔案,如果檔案已經存在,則運行命令后如下圖所示,那么可以跳過生成 ssh key 檔案的步驟,直接添加 key 到 GitHub 上,

- 執行以下命令生成 ssh-key
# 生成 ssh,ssh-keygen 命令中間無空格
$ ssh-keygen -t rsa
- 運行上面那條命令后會讓你輸入一個檔案名,用于保存剛才生成的 SSH key 代碼,遇到下邊命令直接按回車就可以:
Generating public/private rsa key pair.
# Enter file in which to save the key (/c/Users/you/.ssh/id_rsa): [Press enter]
- 接著又會提示你輸入兩次密碼(該密碼是你 push 檔案的時候要輸入的密碼,而不是 GitHub 管理者的密碼),可以不輸入密碼,直接按回車,那么 push 的時候就不需要輸入密碼,直接提交到 GitHub 上了
Enter passphrase (empty for no passphrase):
# Enter same passphrase again:
- 然后會有如下代碼提示,這說明 SSH key 已經創建成功,下一步只需要添加到 GitHub 的 SSH key 上就可以,生成成功后,會有如圖3.3所示的:
Your identification has been saved in /c/Users/you/.ssh/id_rsa.
# Your public key has been saved in /c/Users/you/.ssh/id_rsa.pub.
# The key fingerprint is:
# 01:0f:f4:3b:ca:85:d6:17:a1:7d:f0:68:9d:f0:a2:db [email protected]

- 執行過命令之后,到系統盤 Users 目錄(C:\Users\電腦用戶名.ssh\),查看生成的 ssh 檔案,這里在打開 ssh 檔案的時候可能會遇到 pub 檔案打不開的問題,那么在當前目錄行中輸入 cmd,定位到檔案目錄下,并且在命令列中執行下述命令,這樣可以將公鑰顯示出來
$ type id_rsa.pub

3、添加公鑰到 Github
- 需要將 id_rsa.pub 檔案中一大串密鑰復制到 GitHub 中,可以通過 git 命令復制檔案:
$ clip < ~/.ssh/id_rsa.put
-
登錄 GitHub 賬號,右上角進入 Settings,然后選擇左邊欄的 SSH and GPG keys 進行添加操作
-
點擊 Add SSH key 按鈕添加一個 SSH key ,把你復制的 SSH key 代碼粘貼到 key 所對應的輸入框中,記得 SSH key 代碼的前后不要留有空格或者回車,上面的 Title 所對應的輸入框也可以輸入一個該 SSH key 顯示在 Github 上的一個別名

- 在 Git Bash Here 中輸入以下代碼,來檢驗是否添加 SSH 成功
$ ssh -T [email protected]
-
當你輸入以上代碼時,會有一段警告代碼,這是正常的,你輸入 yes 回車即可,如果你創建 SSH key 的時候設定了密碼,接下來就會提示你輸入密碼,直到密碼輸入正確為止
-
密碼正確后你會看到下面代碼中這段話,說明已經成功設定 SSH 密鑰,如果你看到 “access denied” ,者表示拒絕訪問,那么你就需要使用 HTTPS 去訪問,而不是 SSH
Hi username! You've successfully authenticated, but GitHub does not provide shell access.
四、IDEA 中配置Git
作為一個后端 Java 開發人員,使用 Git 作為代碼版本管理工具是非常必要的,如果能夠在 IntelliJ IDEA 中配置好 Git,那么會大大提高開發效率,因此這里以 IDEA 為例,進行 Git 配置的介紹,
下圖來自 Oliver Steele (http://osteele.com) ,解釋了 git 模型和命令:
相關概念需要清楚:
- workspace:作業區,也就是平時存放代碼的地方
- index 或 staging area:暫存區/快取區,臨時存放代碼的改動,保存即將提交到檔案串列的資訊
- local repository:版本庫/本地倉庫,安全存放資料的位置,其中 HEAD 指向最新放入倉庫的版本
- remote repository:遠程倉庫,托管代碼的服務器
Git 作為支持分布式版本管理的工具,它管理的庫(repository)分為本地庫、遠程庫
-
git add 添加檔案到暫存區
-
git commit 操作的是本地庫,將本地修改過的檔案提交到本地庫(local repository)中
-
git push 操作的是遠程庫,將本地庫中的最新資訊發送給遠程庫(remote repository)中
-
git fetch 操作的是遠程倉庫,從遠程庫中獲取資料到本地倉庫中
-
git pull 是 git fetch + git merge ,就是先 fetch,然后執行 merge 操作,如果加 -rebase 引數,就是使用 git rebase 代替 git merge
-
update project 可以選擇是 merge 還是 rebase
merge 與 rebase 兩個命令的區別聯系:
-
merge 命令會保留所有 commit 的歷史時間不被修改,這樣就形成了以 merge 時間為基準的網狀歷史結構,每個分支上都會繼續保留各自的代碼記錄,主分支上只保留 merge 的歷史紀錄,子分支隨時可能被洗掉
-
rebase 命令會始終把最新的修改放到最前頭,對主分支進行 rebase 后,所有的修改就會在主分支所有修改之前進行修改
創建本地倉庫的兩種方法:一種是創建全新的倉庫,一種是復制遠程的倉庫,
1、IntelliJ IDEA 中配置 Github
- File → Settings → Version Control → Git,如果已經安裝了 Git 工具,點擊
Test按鈕,會顯示安裝路徑以及所安裝的 Git 版本號

- 然后點擊 Version Control 下邊的 GitHub,點擊 + 號,選擇
Log In via GitHub,頁面會自動跳轉,需要在 GitHub 中進行授權,出現自己 GitHub 頭像表示系結成功,既然已經配置了 SSH key,那么就在下邊Clone git repositories using ssh前邊打勾

- 點擊 IDEA 上邊 VCS,選擇
Create Git Repository,然后可以拉取代碼

- 配置完成如下圖4.5所示

- 如果想要讓你的 IDEA 的 Terminal 終端打開能使用 Git 命令,需要做簡單配置:Settings → Tools → Terminal → Shell path,選擇 Git 安裝路徑下邊的 base.exe 即可

2、IDEA中使用 Git 時 Project 中的檔案會有不同的顏色
-
紅色——未加入版本控制
-
綠色——已經加入控制暫未提交
-
白色——加入,已提交,無改動
-
藍色——加入,已提交,有改動
-
灰色——版本控制已忽略檔案
-
黃色——被 git 忽略,不跟蹤
五、Git 命令總結
1、新建代碼庫
# 在當前目錄新建一個Git代碼庫
$ git init
# 新建一個目錄,將其初始化為Git代碼庫
$ git init [project-name]
# 下載一個專案和它的整個代碼歷史
$ git clone [url]
2、配置
# 顯示當前的Git配置
$ git config --list
# 編輯Git組態檔
$ git config -e [--global]
# 設定提交代碼時的用戶資訊
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
3、增加/洗掉檔案
# 定位到 C盤
$ cd C:
# 顯示當前目錄
$ pwd
# 添加指定檔案到暫存區
$ git add [file1] [file2] ...
# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]
# 添加當前目錄的所有檔案到暫存區
$ git add .
# 添加每個變化前,都會要求確認
# 對于同一個檔案的多處變化,可以實作分次提交
$ git add -p
# 洗掉作業區檔案,并且將這次洗掉放入暫存區
$ git rm [file1] [file2] ...
# 停止追蹤指定檔案,但該檔案會保留在作業區
$ git rm --cached [file]
# 洗掉快取
$ git rm -r -f cached ./
# 改名檔案,并且將這個改名放入暫存區
$ git mv [file-original] [file-renamed]
4、代碼提交
# 提交暫存區到倉庫區
$ git commit -m [message]
# 提交暫存區的指定檔案到倉庫區
$ git commit [file1] [file2] ... -m [message]
# 提交作業區自上次commit之后的變化,直接到倉庫區
$ git commit -a
# 提交時顯示所有diff資訊
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代碼沒有任何新變化,則用來改寫上一次commit的提交資訊
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定檔案的新變化
$ git commit --amend [file1] [file2] ...
5、分支
# 列出所有本地分支
$ git branch
# 列出所有遠程分支
$ git branch -r
# 列出所有本地分支和遠程分支
$ git branch -a
# 新建一個分支,但依然停留在當前分支
$ git branch [branch-name]
# 新建一個分支,并切換到該分支
$ git checkout -b [branch]
# 新建一個分支,指向指定commit
$ git branch [branch] [commit]
# 新建一個分支,與指定的遠程分支建立追蹤關系
$ git branch --track [branch] [remote-branch]
# 切換到指定分支,并更新作業區
$ git checkout [branch-name]
# 切換到上一個分支
$ git checkout -
# 建立追蹤關系,在現有分支與指定的遠程分支之間
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到當前分支
$ git merge [branch]
# 選擇一個commit,合并進當前分支
$ git cherry-pick [commit]
# 洗掉分支
$ git branch -d [branch-name]
# 洗掉遠程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
6、標簽
# 列出所有tag
$ git tag
# 新建一個tag在當前commit
$ git tag [tag]
# 新建一個tag在指定commit
$ git tag [tag] [commit]
# 洗掉本地tag
$ 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]
7、查看資訊
# 顯示有變更的檔案
$ git status
# 顯示當前分支的版本歷史,其中commit后黃色字體顯示的是每次提交的版本號,git log 命令顯示從最近到最遠的顯示日志
$ git log
# 顯示commit歷史,以及每次commit發生變更的檔案
$ git log --stat
# 搜索提交歷史,根據關鍵詞
$ git log -S [keyword]
# 顯示某個commit之后的所有變動,每個commit占據一行
$ git log [tag] HEAD --pretty=format:%s
# 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件
$ git log [tag] HEAD --grep feature
# 顯示某個檔案的版本歷史,包括檔案改名
$ git log --follow [file]
$ git whatchanged [file]
# 顯示指定檔案相關的每一次diff
$ git log -p [file]
# 顯示過去5次提交
$ git log -5 --pretty --oneline
# 顯示所有提交過的用戶,按提交次數排序
$ git shortlog -sn
# 顯示指定檔案是什么人在什么時間修改過
$ git blame [file]
# 顯示暫存區和作業區的差異
$ git diff
# 顯示暫存區和上一個commit的差異
$ git diff --cached [file]
# 顯示作業區與當前分支最新commit之間的差異
$ git diff HEAD
# 顯示兩次提交之間的差異
$ 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
8、遠程同步
# 下載遠程倉庫的所有變動
$ git fetch [remote]
# 顯示所有遠程倉庫
$ git remote -v
# 顯示某個遠程倉庫的資訊
$ 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
9、撤銷
# 恢復暫存區的指定檔案到作業區
$ git checkout [file]
# 恢復某個commit的指定檔案到暫存區和作業區
$ git checkout [commit] [file]
# 恢復暫存區的所有檔案到作業區
$ git checkout .
# 重置暫存區的指定檔案,與上一次commit保持一致,但作業區不變
$ git reset [file]
# 重置暫存區與作業區,與上一次commit保持一致
$ git reset --hard
# 重置當前分支的指標為指定commit,同時重置暫存區,但作業區不變
$ git reset [commit]
# 重置當前分支的HEAD為指定commit,同時重置暫存區和作業區,與指定commit版本一致
$ git reset --hard [commit]
# 重置當前HEAD為指定commit,但保持暫存區和作業區不變
$ git reset --keep [commit]
# 新建一個commit,用來撤銷指定commit
# 后者的所有變化都將被前者抵消,并且應用到當前分支
$ git revert [commit]
# 暫時將未提交的變化移除,稍后再移入
$ git stash
$ git stash pop
10、其他
# 生成一個可供發布的壓縮包
$ git archive
# 添加或指定遠程倉庫地址
$ git remote set-url origin "https://..."
$ git config remote.origin.url "https://..."
# 洗掉
$ git remote rm origin
六、Git 使用問題記錄
1、Git 提示:Can't update(master has no tracked branc)
-
原因:本地分支和遠程分支沒有關聯,需要關聯遠程分支
-
解決:git push --set-upstream origin maser
2、更新代碼后顯示: unable to unlink old ‘xxx/xxx/xx’ : invalid argument
- 原因:要提交或更新的檔案被系統執行緒占用
- 解決:把相關服務暫停,重新pull代碼
3、更新代碼后顯示: the following untracked working tree files would be overwritten by checkout
- 原因:本地代碼倉庫目錄下有untracked檔案
- 解決:如果沒有需要上庫的代碼,直接執行 git clean -d -fx 洗掉untracked檔案
4、git pull的時候認證失敗:remote: invalid Login or password fatal: Authentication failed for ‘https://…’
- 原因:賬號密碼失效或者是未登錄
- 解決:windows賬戶下,控制面板 → 用戶帳戶 → windows憑據 → 修改git密碼
5、版本回退git reset --hard {hash}后提示:fatal: could not parse object “hash id”
- 原因:切換到master分支后沒有更新最新代碼,git log不包含要reset的節點
- 解決:更新代碼后git log找到對應節點hash id再reset
附錄:
Git 官方GitHub
參考鏈接:
https://www.jianshu.com/p/e3385a0e4907
github設定添加SSH - 破男孩 - 博客園 (cnblogs.com)
https://www.cnblogs.com/liudinglong/p/14028026.html
https://blog.csdn.net/baidu_35692628/article/details/78330055
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/519019.html
標籤:Java
上一篇:分布式Session如何存盤
