1. 程式人生 > 實用技巧 >P1941集合位置 「次短路題解」

P1941集合位置 「次短路題解」

git使用(對廖雪峰老師git教程的總結)

git配置

全域性配置

主目錄下的.gitconfig

# 設定名稱資訊
git config --global user.name <"Name">
# 設定郵箱資訊
git config --global user.email <"Email">
# 顯示顏色
git config --global color.ui true
# 設定命令別名
git config --global alias.<別名> <命令名>

區域性配置

當前庫的.git目錄下的config,配置命令不加global就是區域性配置。

忽略檔案

當前庫的.gitignore檔案

規則:

<filename>
*.<字尾>

建立版本庫

# 建立資料夾
mkdir name
cd name
# 建立為git倉庫,自動建立master分支
git init

提交檔案流程

提交流程

# 新增要提交的檔案(可新增多個),將檔案修改新增至暫存區
git add filename
# 提交檔案,將暫存區內容提交到當前分支
git commit -m "註釋說明資訊"
# 上傳至遠端倉庫
git push -u origin(遠端倉庫名) master(分支名)

恢復

老版

恢復分兩種情況:

  • 檔案修改後未新增至暫存區

此時恢復,相當於從倉庫中還原最新的提交至本地(且倉庫和本地檔案一致,本地新建的不行),丟棄修改。

  • 檔案修改後新增至暫存區

此時恢復,相當於將新增到暫存區中的內容還原至本地

git checkout -- <filename>

新版

  • 從暫存區恢復至工作區
git restore --worktree <filename>
  • 從倉庫恢復至暫存區
git restore --staged <filename>
  • 從倉庫同時恢復至暫存區和工作區
git restore --source=HEAD --staged --worktree <filename>

檢查流程

# 檢查倉庫當前的狀態(檢視是否有我們不知道的變更)
git status
# 比較工作區與暫存區的區別(如未指定檔名,則比較所有)
git diff <filename>
# 比較暫存區與倉庫的區別(如未指定檔名,則比較所有)
git diff --cached <filename>
# 比較工作區與倉庫的區別(如未指定檔名,則比較所有)
git diff HEAD <filename>

日誌系統

# 檢視提交歷史記錄(第一個為當前狀態,不指定引數則顯示詳細資訊)
git log [--pretty=oneline]
# 檢視命令歷史記錄
git reflog

回溯版本

# 回溯上一個版本(引數HEAD^中^代表往上數第一個版本,^^為往上數第二個版本,如欲回溯的版本過前,可用HEAD~100,即往上數第一百個版本)
git reset --hard <HEAD^>
# 也可以指定回溯版本的commit號(在日誌中可以檢視,往上檢視提交歷史記錄,往下檢視命令歷史記錄)
git reset --hard <commit id>

刪除檔案

# 本地刪除
rm <filename>
# git刪除
git rm <filename>
# 提交刪除操作
git commit -m <"remove filename">

恢復檔案

檔案刪除後想要找回,可以從上一個提交版本中恢復檔案。

git restore --source=<commit_id> --staged --worktree <filename>

遠端庫SSH祕鑰

# 如使用者主目錄不存在.ssh目錄,則需生成祕鑰
ssh-keygen -t rsa -C <"keys">
# 進入.ssh,將公鑰複製至遠端倉庫新增祕鑰處
cd ~
cd .ssh
# id_rsa:私鑰
# id_rsa.pub:公鑰

遠端庫

關聯遠端庫

第一種方式:關聯

# 本地沒有倉庫
mkdir 倉庫名
cd 倉庫名
git init
git remote add <遠端庫名> git@<網路地址>:<賬號名>/<倉庫名>.git (注:遠端庫名,為本地使用,可以更改)
git pull
git branch -a
git checko <分支名>

# 本地已有倉庫
cd 倉庫名
git remote add <遠端庫名> git@<網路地址>:<賬號名>/<倉庫名>.git (注:遠端庫名,為本地使用,可以更改)
get pull
git branch -a
git checko <分支名>

第二種方式:克隆

git clone git@<網路地址>:<賬號名>/<倉庫名>.git

刪除已有遠端庫

# 刪除遠端庫
git remote rm <遠端庫名>

分支

# 檢視所有分支
git branch -a
# 建立分支
git branch <分支名>
# 切換已有分支
git checkout <分支名>
# 建立並切換分支
git checkout -b <分支名>
# 合併目標分支到當前分支 啟用Fast forward模式(刪除分支後,丟失分支資訊)
git merge <分支名>
# 合併目標分支到當前分支 禁用Fast forward模式(刪除分支後,保留分支資訊)
git merge --no-ff -m <"描述"> <分支名>
# 檢視分支合併圖
git log --graph
# 刪除分支
git branch -d <分支名>
# 強制刪除還未合併的分支(不建議使用)
git branch -D <分支名>
# 刪除遠端分支
git push <遠端庫名> :<分支名>

新版切換分支

# 建立並切換分支
git switch -c <分支名>
# 切換已有分支
git switch <分支名>

整理分支變基 (儘量不使用,影響他人使用)

git rebase

BUG修復流程

# 當a分支有正在進行的任務時
# 暫存當前工作區
git stash
# 切換至BUG分支b
git checkout b
# 建立並切換處理BUG分支b-01
git checkout -b b-01
# 處理完BUG後 切換至BUG分支b
git switch b
# 合併處理BUG分支,並保留分支資訊
git merge --no-ff -m "描述" b-01
# 切換至正進行任務的分支
git switch a
# 檢視暫存工作區
git stash list
# 回覆工作區(方式一),保留stash內容
git stash apply
# 回覆工作區(方式二),移除stash內容
git stash pop

# 可恢復指定stash,0為序號
git stash apply stash@{0}

如當前分支a是從b分支出來的,需要將a中的BUG也一併修復

# 在a分支中修復BUG commit id為在b-01中commit所產生commit id
git cherry-pick <commit id>

多人協作

遠端庫操作

# 檢視遠端庫資訊
git remote
# 檢視詳細資訊(fetch:抓取許可權,push:推送許可權)
git remote -v

# 建立遠端分支至本地(先在遠端庫建立分支,然後抓取至本地),分支名需一致
git checkout -b <分支名> <遠端庫名>/<遠端分支名>

推送操作

# 推送本地分支至遠端庫對應分支
git push <遠端庫名> <本地分支名>

抓取失敗

# 錯誤資訊:no tracking information(本地分支未連結遠端分支)
# 設定連結
git branch --set-upstream-to = <遠端庫名>/<遠端分支名> <分支名>

情景一:其他人對分支推送了,你推送的與其衝突

# 首先抓取合併最新提交
git pull
# 解決衝突後,重新推送

標籤管理

# 建立當前分支的標籤
git tag <tagname>
# 建立特定commit id 標籤
git tag <tagname> <commit id>
# 建立當前分支帶描述的標籤
git tag -a <tagname> -m <"text">
# 建立特定commit id帶描述的標籤
git tag -a <tagname> -m <"text"> <commit id>
# 刪除標籤
git tag -d <tagname>


# 檢視標籤資訊
git show <tagname>


# 向遠端庫推送標籤
git push <遠端庫名> <tagname>
# 向遠端庫推送所有標籤
git push <遠端庫名> --tags
# 刪除遠端庫標籤
git push <遠端庫名> :refs/tags/<tagname>