Git使用教程

木槐muhuai發表於2024-04-19

【本文以 Gitee 為例】


git學習筆記

Git 安裝

Git 官網下載地址

  1. 進入官網,下載 git

  2. 安裝 git 其實一直點選 next 就可以了
    【具體安裝選項的闡述等之後再安裝 git 時再寫 awa】

  3. 驗證安裝是否成功
    右鍵出現如下選項時表示安裝成功

基礎使用

倉庫

透過網站快速建立

建立倉庫

管理倉庫

倉庫成員

透過終端配置

建立倉庫

管理倉庫

倉庫成員

程式碼託管

資訊配置

git config --global user.name "uaer_name"
git config --global user.email "user_email"

如果沒有配置,bash 不會報錯,但是會有 " 請配置 使用者名稱和密碼 "的提示

git clone

git clone http_url

git init
對於一個本地的,未連線遠端倉庫的專案,執行 git init 將生成 .git 資料夾

git pull

​ 拉取專案

git stash

git stash	# 將現在的狀態存入暫存區
git stash list	# 檢視暫存的狀態列表
git stash pop	# 恢復棧頂的狀態
git stash drop	# 刪除棧頂狀態
git stash save "message"	# 暫存現在的狀態並新增備註 "message"

stash 儲存到的暫存區,可以理解為一個棧

git add

​ 將檔案更新到暫存區

git add .	# 將所有檔案新增到暫存區
git add doc_url		# 將特定檔案新增到暫存區(需要檔案字尾名)
git add doc_url1 doc_url2	# 將指定的幾個檔案新增到暫存區

git commit

git commit -m "message"	# 提交暫存區的內容到本地倉庫

git push

git push	# 提交本地倉庫的內容到遠端倉庫

深入介紹

基本理論

忽略檔案配置

怎麼實現在git提交時對某些檔案進行忽略

比較粗糙的一個辦法【針對 不需要同步的 新加入 的檔案】
在已有專案的 .gitignore 檔案處,右鍵執行 在整合終端中開啟

然後執行 git status
則不需要同步的檔案路徑會出現在終端視窗,將檔案路徑複製到 .gitignore 檔案中

分支

Git——分支 - 詳細解釋

Git/Gitee--- 分支管理

Gitee建立分支

基礎使用

建立分支

  • 終端命令列建立
    git branch branch_name

    git branch branch_name建立的分支,它的備註是分支起點的備註
    它的分支七點為當前分支【它的內容為當前分支的克隆】

    使用終端命令建立的分支,建立完成後需要 git push,將分支與遠端倉庫連線

  • 網頁建立

更新分支及程式碼

  • git pull

    git pull 可以理解成 git fetch 之後再 git merge

檢視分支

  • git branch

  • git branch -v

  • git branch -a

    git branch -v可以檢視該分支的分支備註
    git branch -a 還可以查詢到遠端倉庫的分支情況

    當前所在分支會用 * 進行特別標註

    可能在建立分支之後使用命令查詢,並不能查詢到分支情況,在網頁上也不能跟蹤到該分支
    但是不用擔心
    需要透過 git push 連線分支到倉庫
    依然使用 git checkout branch_name 可以成功切換分支

切換分支

  • git checkout branch_name

開發及提交

後續在分支中開發及提交流程與倉庫的基礎使用一致
git add
git commit -m ""
git push

分支合併

  • 自行切換到主分支進行合併
    此方法由開發者使用 git checkout branch_name 切換到主分支後
    使用 git merge branch_name 將該分支合併到主分支上

  • 請求Pull Requests
    此方法由開發者在網頁端點選 Pull Requests 並完善 PR 請求資訊後,由他人進行稽核、衝突解決等操作
    注意,拉取遠端倉庫之前,使用git stash save進行暫存並新增說明

    I. git pull

    git pull 將拉取該分支的遠端程式碼以及該分支所關聯的遠端倉庫的程式碼

    II. git merge branch_name

    將當前分支與 branch_name 分支進行合併
    在實際開發中,向遠端發起 PR 之前需要進行這一步,以達到與遠端程式碼的同步

    III. git stash pop

    IV. git add git commit -m "" git push

    V. 發起PR

合併其他分支的程式碼

  • 理論上來講只需要進行 git merge branch_name 即可
  • 可能出現 Already up to date. 的情況,是因為 git pull 執行時並未對其他分支的程式碼、狀態進行更新,因此在本地, git 認為當前分支與其他分支版本一致
  • 切換到需要被合併的分支
    git checkout branch_name
  • git pull
    這將拉取該分支的程式碼到本地
  • 切換回自己原來的分支
  • git merge branch_name

可能遇到的問題

  • git pull git merge branch_main 操作不能拉取到主分支最新的程式碼,顯示 Already up to date.

    理論上是 git pull 將拉取遠端倉庫中本分支 + 主分支的程式碼,然後執行 git merge 將對分支進行合併
    但是(以使用 Visual Studio Code為例)
    則需要先切換到主分支,然後 git pull
    然後返回原分支,進行 git pull 和 git merge

  • git push --set-upstream origin branch_name 使用終端命令建立的分支
    在提交時要求連結上游分支

    使用 git push -u origin branch_name 提交一次即可

可能遇到的問題

身份驗證

【git 報錯The requested URL returned error: 403】

【解決git操作一直要求輸入使用者名稱和密碼的問題】

【如何解決git每次都要輸入使用者名稱密碼的問題】

【Git pull 或 push 提示:The requested URL returned error: 403】

問題復現:

我有一個 Gitee 賬號 H,我用 H 賬號參加了別人的專案(加入別人的倉庫),並在本地進行了開發;
我修改了 H 賬號的郵箱及手機號;
我註冊了一個新的賬號 MH,手機號為原來 H 賬號的手機號;
我使用 MH 建立了倉庫,並在本地進行了全域性配置,然後開發和更新;

我再次登陸 H 賬號,進行 H 專案的更新;

  1. 配置全域性 user.name | user.email
git config --global user.name "uaer_name"
git config --global user.email "user_email"

沒有起效

  1. 清除快取
git config --local --unset credential.helper
git config --global --unset credential.helper
git config --system --unset credential.helper
  1. pull ==> 輸入使用者名稱和密碼 ==> 白色輸入框中點選【取消】
git pull
error: unable to read askpass response from 'git-askpass.exe所在位置'
Username for 'https://gitee.com': username
error: unable to read askpass response from 'git-askpass.exe所在位置'
Password for 'https://user_name@gitee.com':
Already up to date.

一般 git-askpass.exe 在 Git 的安裝目錄下:Git/mingw64/bin/git-askpass.exe
Password for 'https://muhuai-muhuai@gitee.com': password(密碼不會顯示)

  1. 配置全域性資訊
 git config --global credential.helper store
 git config --global user.username "user_name"
 git config --global user.password "password"

  1. 檢視全域性配置資訊 我是傻子,配置全域性資訊的時候打錯指令了
git config --global --list
credential.https://gitee.com.provider=generic
user.username=user_name
user.password=password.
(user.uaername=user_name) ~~我也不知道為什麼打成這樣了,我是傻子~~
  1. 修改全域性配置
git config --global --edit

I -- 開始寫入
Esc -- 退出寫操作
:wq -- 儲存並退出

  1. pull ==> 輸入使用者名稱和密碼 ==> 白色輸入框中點選【取消】
  2. 配置區域性資訊
git config --local credential.helper store
git config --local user.username "user_name"
git config --local user.password "password"

  1. 清除快取
  2. 檢視配置資訊
git config --global --list
credential.https://gitee.com.provider=generic
user.username=user_name
user.password=password.

其實到這裡應該已經可以了,但是我是傻子,我加了一句指令就不行了
git config --global credential.helper store

  1. 修改專案資料夾下的 .git ==> config 檔案
[core]
	repositoryformatversion = 0
	filemode = false
	bare = false
	logallrefupdates = true
	symlinks = false
	ignorecase = true
[remote "origin"]
	url = https://user_name:password@gitee.com/project_url.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
	remote = origin
	merge = refs/heads/master

全域性配置檔案 -- 使用者目錄
"C:\Users\username\.gitconfig"

[credential "https://gitee.com"]
	provider = generic
[user]
	username = user_name
	password = password

預設區域性設定 可能

Git\git\Git\etc

[diff "astextplain"]
	textconv = astextplain
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[http]
	sslBackend = openssl
	sslCAInfo = Git/git/Git/mingw64/etc/ssl/certs/ca-bundle.crt(安裝目錄下)
[core]
	autocrlf = true
	fscache = true
	symlinks = false
[pull]
	rebase = false
[credential "https://dev.azure.com"]
	useHttpPath = true
[init]
	defaultBranch = master

程式碼衝突

​ 一般程式碼衝突發生在

  • 如果每次提交程式碼按照 git stash --> git pull --> git stash pop ,那麼衝突一般發生在 git stash pop
  • 使用分支進行分支合併,即 git merge branch_name 時,也可能出現衝突

​ 解決衝突的工具很多,git 自帶的網站、IDEA、Git GUI等

以 Visual Studio Code 為例

  1. 檔案的末尾出現 ! 表示該檔案中發生衝突 -- 點選 在合併編輯器中解析

  2. 合併衝突
    一般來講,左邊部分是 stash pop 出來的更改,右邊部分是 pull 或 merge 之後的更改,下面是結果,結果中的內容可以手動修改

  3. 合併完成之後,檔案預設已經執行了 git add 指令,因此需要先提交

版本回退

其他

warning: in the working copy of ‘...‘, LF will be replaced by CRLF the next time Git touche

​ 在執行 git add 操作之後,可能出現以上警告

warning: in the working copy of ‘...‘, LF will be replaced by CRLF the next time Git touche

​ 警告的含義是:Git 已自動將 LF 換行替換為 CRLF 回車換行

相關文章