01. Git常用操作速查

@[toc]

一遏弱、Git配置

使用 Git Bash 控制臺操作

  1. 初始化
git init
  1. .git文件夾下的文件含義

    • HEAD 文件指示目前被檢出的分支
    • description 用來顯示對倉庫的描述信息
    • config 文件包含項目特有的配置選項殉疼,本項目的配置,全局的在 對應(yīng)系統(tǒng)相應(yīng)用戶的文件夾/.gitconfig
    • info 目錄包含一個全局性排除文件
    • hooks 目錄包含客戶端或服務(wù)端的鉤子腳本
    • index 文件保存暫存區(qū)信息
    • objects 目錄存儲所有數(shù)據(jù)內(nèi)容
    • refs 目錄存儲分支的提交對象的指針
    • branches 新版本已經(jīng)廢棄無須理會
  2. 查看用戶名與郵件配置(查看改動記錄非常方便)

git config user.name
git config user.email
  1. 設(shè)置(修改)用戶名與郵件
git config --global user.name "hahadasheng"
git config --global user.email "liuchnegdage@sina.com"
  1. 修改配置信息(低版本)
git config --global --replace-all user.name "lc"

可以直接修改全局配置文件,在用戶主目錄下未玻;比如Windows的在當(dāng)前用戶的用戶文件夾下 C:\Users\administrator\.gitconfig

  1. 允許命令超長路徑
# git 設(shè)置支持超長路徑
git config --system core.longpaths true
  1. 配置代理 一般正規(guī)點的公司都有防火墻,上網(wǎng)需要代理服務(wù)器
git config --global http.proxy http://some.name.you.know:80

二旨剥、鑒權(quán) 拉取代碼

1). SSH 推薦

  1. 生成非對稱加密密鑰對
ssh-keygen
  1. ~/.ssh/id_rsa.pub 的內(nèi)容拷貝到托管平臺

  2. 克隆代碼

git clone
  1. 拉去代碼
git pull

2). HTTP(S) 不方便机久,不推薦

  1. 直接 clone (指定文件可選,建議不寫) 輸入托管平臺的用戶名密碼
git clone <url> [localDirName]
  1. 緩存用戶名密碼
# 默認(rèn)15分鐘
git config –-global credential.helper cache
# 設(shè)置為一個小時
git config credential.helper ‘cache –timeout=3600’ 
# 永久記住秘密
git config --global credential.helper store

~/.gitconfig 全局配置文件下會記錄此配置

[credential]
    helper = store

三藏鹊、提交代碼一般流程

工作區(qū):正在編輯的文件夾下的文件润讥,沒有通過 git add添加的文件
暫存區(qū):通過git add添加但是沒有git commit的文件所在的區(qū)域

  1. 拉取遠(yuǎn)程代碼
git pull
  1. 如果拉取失敗, 一般是本地未提交的修改的文件與與服務(wù)器提交記錄的文件有重合
git stash

git stash list 可以查看當(dāng)前本地stash的棧中有哪些修改,棧中可以存放多個分支的本地修改

git pull
git stash pop

注意盘寡,需要stash棧中棧頂對應(yīng)的分支修改與當(dāng)前一致楚殿,否則可能導(dǎo)致本地修改丟失

git stash list //查看本地stash棧中的記錄
git stash apply stash@{0} //選中對應(yīng)的記錄應(yīng)用到當(dāng)前工作區(qū)域,記錄不會被刪除
  1. 檢查是否有沖突竿痰,如果有則手動解決

  2. 檢查改動文件 (可選)脆粥,顯示為紅色

git status
* Untracked: 未跟蹤,一般為新增文件,此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
* Modified: 文件已修改, 僅僅是修改, 并沒有進(jìn)行其他的操作.
* deleted: 文件已刪除菇曲,本地刪除冠绢,服務(wù)器上還沒有刪除.
* renamed:文件名稱被改變
  1. 如果發(fā)現(xiàn)無意編輯了一個文件,可以將其還原到修改前的狀態(tài)
# 還原指定文件
git checkout -- <fileName>

# 還原所有文件
git checkout .
  1. 將文件添加到暫存區(qū)
# 添加工作區(qū)指定修改文件到暫存區(qū)
git add <file>

# 添加所有修改文件到暫存區(qū)(忽略文件除外)
git add . 

此時 git status 時在暫存區(qū)的文件顯示為綠色

  1. 如果想取消添加到暫存區(qū)
git rm --cached <fileName>

--cached 作用為指定暫存區(qū)常潮;不寫默認(rèn)則為工作區(qū)

  1. 提交到本地倉庫
git commit . -m "commit message"

.標(biāo)識選擇暫存區(qū)所有文件弟胀,如果只需要指定文件換成對應(yīng)文件名即可。

  1. 最簡單的提交方式
git push

四喊式、diff 比較不同

1). 同個分支下的比較

  1. 查看工作區(qū)與暫存區(qū)文件的修改情況
# 查看所有文件
git diff

# 查看指定文件
git diff <fileName>

紅色的-號代表刪除的內(nèi)容孵户;綠色的加號表示添加的部分

  1. 查看暫存區(qū)與本地版本庫的對比
# 查看所有文件
git diff --cached

# 查看指定文件
git diff --cached <fileName>
  1. 查看歷史提交記錄的哈希值
git log

commit 后面的哈市值則為對應(yīng)的提交哈希值

  1. 工作區(qū)與對應(yīng)的歷史提交對比
git diff hash值 [<fileName>]
  1. 暫存區(qū)與提交記錄對比
git diff --cached hash值 [<fileName>]
  1. 將工作區(qū)和暫存區(qū)文件與最新的版本庫比較
git diff HEAD

HEAD代表當(dāng)前所在的分支名,如果想比較其他分支可以將其改為其他分支名

  1. 比較兩個歷史記錄
git diff hash值1  hash值2
  1. 工作區(qū)與歷史版本進(jìn)行比較
# 指定比較的歷史版本
git diff <commit_hash>

# 比較最近的一次提交
git diff
  1. 比較兩個歷史版本
git diff <commit_hash1> <commit_hash2>

2) 不同分支下的比較

  1. 查看兩個不同的分支有哪些文件不一樣
git diff branch1 branch2 --stat
  1. 顯示文件具體修改
git diff branch1 branch2 filename
  1. 顯示全部文件修改(如果文件多則會眼花繚亂)
git diff branch1 branch2
  1. 查看一個分支有而另一個沒有
# 查看dev有的記錄但是master沒有的記錄
git log dev ^master
  1. 單純比較差異岔留,顯示所有記錄
git log branch1..branch2

有綠色顯示的表示只在哪個分支上有夏哭,另一個沒有

  1. 查看各個記錄存在于哪些分支上
git log --left-right develop...test

commit后面有<表示develop; >表示為test分支的提交記錄

  1. 顯示當(dāng)前分支與其他分支最新版本進(jìn)行比較
git diff <orher branch>
  1. diff可以跨分支進(jìn)行對比
# 當(dāng)前最新與其他分支的歷史版本進(jìn)行對比 `git log`查找commit_hash
git diff <other_commit_hash>

# diff 可以比較任意分支任意提交之間的差異
git diff <commit_hash1> <commit_hash2>

五、Git忽略文件權(quán)限問題

  1. Git會記錄文件的權(quán)限献联,如果本地與版本庫同一個文件需要合并竖配,如果存在權(quán)限不一致則會產(chǎn)生沖突何址,實際工作中是幾乎不會讓Git記錄文件的權(quán)限,可以配置一下讓Git忽略文件的權(quán)限
# 項目局部配置
git config core.filemode false
# 全局配置
git config --global core.filemode false

六进胯、忽略指定文件或目錄

項目中的一些編譯文件用爪,或者不想提交的配置文件等可以過濾掉

  1. 在項目的工作區(qū)創(chuàng)建一個 .gitignore 的文件,Win下建議使用notepad++的另存為進(jìn)行創(chuàng)建胁镐,直接創(chuàng)建文件會失敗
  2. 每行代表一個忽略的文件偎血,支持通配符,支持文件夾盯漂,支持文件
# 文件的忽略方式
.jeckins.ini

# 文件夾以及其下的所有文件
target/
.idea/

# 通配符
*.iml

# 防止通配符導(dǎo)致向提交的文件被忽略(如果是直接忽略則無效)
!want.jar
  1. 添加忽略的文件 .gitignore配置有誤的檢查
git check-ignore -v <fileName>
  1. 強制添加被忽略的文件
git add -f haha.iml
  1. 保留忽略的文件夾下部分文件寫法
# 忽略的文件夾
test/*

# 過濾的被忽略的文件夾下的文件
!test/index.html

上述的*號通配符必須得保留才能生效

  1. 忽略已經(jīng)提交commit的文件(夾)颇玷,先在.gitignore中設(shè)置該文件(夾)為忽略,然后從暫存區(qū)中刪除
# 移除緩存中的文件
git rm --cached <fileName>
# 如果是文件夾則需要在加一個參數(shù)
git rm -r --cached <dirName>

# 提交此次修改就缆,由于忽略文件中已經(jīng)忽略了此文件夾和文件帖渠,需要強制添加 -f
git add -f <dirName>

七、分支管理

  1. 查看本地分支 綠色表示當(dāng)前分支
git branch
  1. 查看本地和遠(yuǎn)程所有分支
git branch -a
  • 查看遠(yuǎn)程倉庫信息
git remote show origin
  1. 切換到遠(yuǎn)程或者本地分支(遠(yuǎn)程或者本地已經(jīng)存在的分支)
git checkout <exist branch>
  1. 新建本地分支 (將當(dāng)前分支的版本拷貝過去)
git checkout -b <new branch>
  1. 將本地新建的分支推送到服務(wù)器
git push --set-upstream origin <new branch>
  1. 合并分支
git merge <other branch>

查看合并的結(jié)果 git log 哈希值后面有個(HEAD -> branch1,branch2) 就是合并的記錄

  1. 普通刪除分支违崇,可避免數(shù)據(jù)丟失
git branch -d <branch name>
  1. 如果普通無法刪除阿弃,使用強制刪除分支
git branch -D <branch name>
  1. 恢復(fù)刪除的分支
git branch <branch name> <hash value>

八、回滾提交羞延,不會滾代碼

工作中,有時提交的代碼審核沒有過(CI/KW等)脾还,被abandon了伴箩;后續(xù)可以在本地進(jìn)行追加提交(中途不能有自己的新提交),但是有時候就想放棄此次提交鄙漏,或者本地提交后想要丟棄嗤谚,可以使用reset命令

  1. 查看需要回滾的提交節(jié)點,拷貝對應(yīng)的哈希值(推薦直接在idea工具中操作)
git log
  1. 進(jìn)行回滾
git rebase //將自己的提交放在前面,這樣下方的reset就只回到上個版本就可以了
git reset 哈希值
  1. 如果想撤銷最近的一次提交
git reset HEAD^
  1. 如果想撤銷修改的代碼
# 撤銷某個文件并查看狀態(tài)
git checkout filename && git status

# 撤銷所有的修改到上次提交的位置
git checkout .

九怔蚌、刪除過期的分支巩步,清理無意義數(shù)據(jù)

清理不需要的分支數(shù)據(jù),提高響應(yīng)速度

  1. 查看所有分支列表
git branch -a

紅色的為遠(yuǎn)程分支

  1. 刪除遠(yuǎn)程分支
git push origin --delete <remote branch>

控制臺顯示 deleted 表示刪除成功

  1. 將遠(yuǎn)程分支與本地分支進(jìn)行對比
git remote prune origin
  1. 查看本地分支的標(biāo)注情況
git branch -vv

對應(yīng)分支后面如果有:gone的標(biāo)識則表示遠(yuǎn)程分支已經(jīng)被刪除桦踊,該分支可以被清理

  1. 刪除本地分支
git branch -d <branchName>

十椅野、配置多個遠(yuǎn)端倉庫:把代碼推送到不同的服務(wù)器

1) 每個倉庫分別對應(yīng)一個遠(yuǎn)程地址

配置多個遠(yuǎn)程倉庫

  1. 查看當(dāng)前地址
git remote -v

默認(rèn)的倉庫為origin; 顯示的信息有pushfetch兩種
執(zhí)行git push會調(diào)用對應(yīng)的push地址,執(zhí)行git fetch
則會調(diào)用fetch地址籍胯;拉取代碼默認(rèn)情況下會產(chǎn)生一個遠(yuǎn)程倉庫origin,
并且對應(yīng)的push地址也只有一個竟闪。

補充:git fetch 為只拉取更新,不進(jìn)行合并 git pull = git fetch && git merge

# 將某個遠(yuǎn)程主機的更新全部取回本地
git fetch <remoteAddr>

# 取回特定分支的更新
git fetch <remoteAddr> <branchName>

# 查看取回的信息
git log -p FETCH_HEAD
  1. 添加多個倉庫

一般默認(rèn)的倉庫名為origin

git remote add <新的倉庫名> <遠(yuǎn)程倉庫地址>
  1. 提交代碼時選擇倉庫
# review 提交方式
git push origin head:refs/for/master

# 直接提交方式
git push github master

# 不寫倉庫則push到默認(rèn)倉庫
git push
  1. 修改默認(rèn)指定倉庫
git push -u github
  1. 刪除倉庫
# 刪除指定的倉庫
git remote remove <倉庫名稱>

2) 一個倉庫對應(yīng)多個遠(yuǎn)程地址

執(zhí)行一條命令杖狼,將代碼往兩個地址同時推送

  1. 向origin倉庫中添加多個地址
git remote set-url --add origin <remoteAddr>

十一炼蛤、代碼覆蓋

1) 本地覆蓋遠(yuǎn)端

如果不小心提交了錯誤的信息到遠(yuǎn)程,可以用新的提交來覆蓋蝶涩,但是如果是敏感信息理朋,這種方式顯然有缺點絮识,因為提交記錄中還是可以查看到;不推薦使用此種方式嗽上;

  1. 查看需要回滾提交的哈希值
git log
  1. 回滾本地提交次舌,不會滾代碼改動
git reset <哈希值>
  1. 強制推送到遠(yuǎn)程
git push origin -f

此類命令比較危險,一般在托管品臺比如GitLab上會對類似的操作進(jìn)行權(quán)限設(shè)置

2) 遠(yuǎn)端覆蓋本地

  1. 拉取遠(yuǎn)程最新代碼炸裆,但是不進(jìn)行合并
git fetch
  1. 將當(dāng)前工作的差異部分丟棄掉垃它,完全與目標(biāo)保持一致
git reset --hard origin/master

這里origin/master則是目標(biāo)比較分支

十二、恢復(fù)已刪除的分支烹看,文件等

前提是沒有執(zhí)行 git gc 清除信息国拇,一般如果不手動執(zhí)行此命令,git會對那些無用的object保留很長的時間

1) 恢復(fù)已刪除的分支

  1. 顯示分支管理命令 找到要恢復(fù)分支的某次提交前面的 commit_id
git reflog show
  1. 建立新的分支并進(jìn)行恢復(fù)
git checkout <新取一個分支名稱> <commit_id>

通過此種方式則重建的刪除的分支

2) 回滾reset操作

如果想找回git reset之前的提交記錄

  1. 查看操作歷史
git reflog
  1. 找到reset之前的commit_id并回退到那個id即可
git reset --hard <commit_id>

3) 從歷史版本中找回刪除的文件

  1. 查看操作歷史
git reflog
  1. 找到需要找回對應(yīng)的commit_id
git checkout <commit_id> <需要找回的文件名稱>

十三惯殊、單獨回滾代碼 記錄不變只回滾代碼

reset命令會回滾記錄酱吝,如果遠(yuǎn)程由此記錄,并禁止強制提交土思;則此時可以
使用revert命令只回滾代碼

  1. 查詢需要回滾代碼的分支commit_hash(比如向撤銷此次提交的代碼修改)
git log
  1. 回滾需要撤銷的提交
git revert <對應(yīng)的commit_hash>

注意务热,撤銷對飲的提交,revert后面的hash就是對應(yīng)的那次提交

  1. 命令執(zhí)行后會彈出一個合并代碼的提示框,編輯好信息后 esc :x進(jìn)行保存退出
    再通過git log發(fā)現(xiàn)多了一條Revert的記錄己儒,說明已經(jīng)成功崎岂;此時可以用git diff <被回退的提交hash>
    可以發(fā)現(xiàn)被回退的提交修改已經(jīng)被放棄了。

  2. 提交代碼

git push

在使用 revert 去恢復(fù)某個版本代碼時闪湾,Git 只會撤銷指定版本的代碼冲甘,對指定版本后的所有版本不會有任何影響
比如說你提交了 1途样、2江醇、3 三個版本,當(dāng)你撤銷版本2的時候何暇,會生成版本4陶夜,但是不會對版本3產(chǎn)生影響。

git reset 與 git revert的比較

  • git reset: 會改變之前的版本記錄裆站,可能會導(dǎo)致不能提交到遠(yuǎn)程倉庫条辟;
  • git revert: 只會撤銷某個版本的代碼,然后在當(dāng)前分支增加一條版本新記錄遏插;
  • git revert: 只會撤銷指定版本的代碼捂贿,而不是指定版本后的所有版本。

十四胳嘲、合并分支merge

1) 全部進(jìn)行合并厂僧,不過濾特定文件

  1. 切換到需要合并的分支,比如將dev合并到test分支
git checkout test
  1. 將dev合并到test分支
git merge dev
  1. 如果出現(xiàn)沖突了牛,建議使用工具手動解決沖突颜屠,(比如使用IEDA的Git解決沖突)

  2. 將解決后的沖突文件添加到暫存區(qū)并提交一個新的版本 (工具可能會自動執(zhí)行這一步)

git add . && git commit -a

解決沖突后的提交需要使用-a選項

2) 忽略有沖突文件的合并

  1. 上述案例中的dev項目工作區(qū)添加一個文件 .gitattributes 寫入內(nèi)容
<忽略沖突文件的文件名> merge=ours
  1. 按照上述合并操作進(jìn)行合并

合并后的test分支中對應(yīng)文件如果和dev有沖突則保留原來的內(nèi)容辰妙,如果沒有沖突也會進(jìn)行合并

十五、鉤子事件

Git進(jìn)一步學(xué)習(xí)可以研究哈甫窟,目前只是了解

1) 客戶端鉤子事件

  1. 鉤子事件在一些特定命令執(zhí)行時觸發(fā)
  2. 鉤子函數(shù)腳本在 .git/hooks 下面
  3. 鉤子語法使用的為shell腳本密浑,部分混雜了Perl代碼,可以Pytho或者其他腳本語言編寫
  4. 鉤子觸發(fā)的腳本文件需要正確命名粗井,以.sample結(jié)尾的腳本文件尔破,
  5. 一般情況下鉤子觸發(fā)的鉤子名稱
鉤子名字 觸發(fā)時間
pre-commit 執(zhí)行g(shù)it commit命令完成前被執(zhí)行。
prepare-commit-msg 在執(zhí)行完pre-commit鉤子之后被調(diào)用浇衬。
commit-msg git commit執(zhí)行完成后被調(diào)用懒构。
post-commit post-commit鉤子在commit-msg鉤子之后立即被運行 。
post-checkout post-checkout鉤子在使用git checkout命令時候會被調(diào)用耘擂。
pre-rebase pre-rebase鉤子在使用git rebase命令發(fā)生更改之前運行
pre-receive pre-receive鉤子在有人用git push向倉庫推送代碼時被執(zhí)行胆剧。
update update 鉤子在pre-receive之后被調(diào)用,分別被每個推送上來的引用分別調(diào)用醉冤。
post-receive 在成功推送后被調(diào)用秩霍,適合用于發(fā)送通知。

2) 服務(wù)端鉤子使用 服務(wù)端接受推送時事件處理

  1. 服務(wù)端的鉤子同樣在 .git/hooks
  2. 服務(wù)端的鉤子配置一般是在托管平臺進(jìn)行管理

十六蚁阳、合并代碼保留提交記錄:rebase功能的使用

rebase與merge功能類似铃绒,但有所不同

  1. git rebase 會將另外一個分支提交的所有新版本記錄復(fù)制到當(dāng)前分支中

2.切換到合并的分支,比如test

git checkout test

git rebase dev
  1. merge與rebase的相似點:代碼層面沒有什么變化

  2. merge與rebase的區(qū)別: 版本記錄的變化

    • git merge命令合并代碼之后螺捐,版本記錄會按照時間順序排序匿垄,并自動產(chǎn)生一個Merge branch的版本;撤銷操作會很麻煩
    • git rebase命令合并代碼之后归粉,版本記錄會將目標(biāo)分支的版本放在后面,然后再將當(dāng)前分支的版本記錄放在前邊,不會產(chǎn)生其他類似Merge branch的版本漏峰。撤銷操作會相對容易

十七糠悼、復(fù)制指定記錄到當(dāng)前分支: cherry-pick

將另外一個分支中的某個版本單獨復(fù)制到當(dāng)前的分支中來; 建議在類似IDEA工具中進(jìn)行操作,如果出現(xiàn)沖突可以很方便解決

  1. 在對應(yīng)分支確定需要cherry-pick的提交
git log
  1. 切換到需要合并的分支
git cherry-pick <commit_hash>

十八浅乔、工作區(qū)暫存 stash解決提示代碼未提交問題

git stash 命令會將當(dāng)前工作區(qū)未提交的改動放在一個stash棧中倔喂,此時代碼會與最新的提交保持一致,如果切換到
其他分支或者有改動再次執(zhí)行靖苇,此時棧頂?shù)脑貢兂勺钚聅tash的記錄

還有種場景席噩;在git pull時發(fā)現(xiàn)本地未修改未提交的文件與在服務(wù)器最新提交的記錄中也有修改導(dǎo)致pull失敗贤壁;
此時可以使用git stash && git pull && git stash pop 合并修改悼枢,如果有沖突則解決沖突。

  1. 執(zhí)行stash命令
git stash
  1. 查看stash棧中存放的記錄
git stash list
  1. 從stash棧中恢復(fù)棧頂?shù)牡奶峤?并保持棧頂?shù)挠涗?/li>
git stash apply
  1. 從stash棧中恢復(fù)指定的提交,并保持對應(yīng)的記錄
git stash apply <編號如stash@{0}>
  1. 從stash棧中彈出棧頂?shù)脑仄⒉穑瑮V斜粡棾龅膭t不會保留
git stash pop
  1. 清除stash棧中指定的提交
git stash drop <提交的id比如stash@{1}>
  1. 清空stash棧中的信息
git stash clear

十九馒索、解決臨時緊急任務(wù)的開發(fā)思路

  1. 場景復(fù)現(xiàn):dev分支正在開發(fā)下一個迭代版本莹妒,預(yù)計2個月;test分支為當(dāng)前發(fā)布線上版本绰上;
    先有一個必須在一周上線的緊急任務(wù)旨怠!

  2. 設(shè)計思路:

    1. 從test中新建一個分支 temp,并在temp中完成緊急開發(fā)。
    2. 將temp中新的提交記錄通過git rebase的方式經(jīng)提交記錄復(fù)制到test版本中進(jìn)行測試上線
    3. 為了避免將來代碼合并產(chǎn)生沖突蜈块,將temp中的新提交git rebase到dev開發(fā)分支中

二十鉴腻、代碼沖突解決總結(jié)

  1. git mergegit pull命令導(dǎo)致的沖突,處理完沖突后使用git commit -a百揭;
  2. git rebase命令導(dǎo)致的沖突爽哎,處理完沖突之后使用git rebase --continuegit rebase --skip
  3. git stash apply命令導(dǎo)致的沖突信峻,處理完沖突之后使用git add .即可倦青。
  4. 終極解決方案:使用IDEA或者烏龜git處理沖突,直觀盹舞、大氣产镐、方便、效率高

二十一踢步、Git瘦身方案

1) 克隆最后一個版本癣亚,避免Git拉去所有的歷史版本導(dǎo)致緩慢

  1. 本地克隆
git clone <remoteAddr> --depth==1

代碼不會改變,只是歷史提交記錄只有一條

2) 清空版本記錄

  1. -新建本地干凈分支获印,只保留最后一次版本信息
git checkout --orphan <new_branch_name>
  1. 刪除久的分支
git branch -D <branch_name>
  1. 將新的分支重命名為原有分支
git branch -m <branch_name>
  1. 強制推送到遠(yuǎn)程服務(wù)器(臨時關(guān)閉強制推送限制)
git push -f origin <branch_name>

3) 清理大文件(比較高級)

使用git branch-filter可以遍歷 Git 的版本歷史信息

  1. 找出大文件對應(yīng)的hash值述雾,這里一找出前5個為例
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
  1. 根據(jù)hash值找到對應(yīng)文件名
git rev-list --objects --all | grep <hash_value>
  1. 執(zhí)行刪除文件命令
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file_name>'
  1. 刪除無用的記錄信息
rm -rf .git/refs/original/  && git reflog expire --expire=now --all
  1. 重新建立文件與 Git 倉庫的關(guān)聯(lián)關(guān)系
git fsck --full --unreachable
  1. 重新壓縮代碼,減少倉庫體積
git repack -A -d
  1. 執(zhí)行GC兼丰,清理垃圾
git gc --aggressive --prune=now
  1. 強制推送到遠(yuǎn)程
git push --force origin master

二十二玻孟、Docker快速搭建GitLab

1) 快速搭建Docker環(huán)境

Linux環(huán)境Docker安裝略

  1. 拉去鏡像
docker pull gitlab/gitlab-ce
  1. 創(chuàng)建本地持久化卷
mkdir -p ~/config/gitlab/config
mkdir -p ~/config/gitlab/logs
mkdir -p ~/config/gitlab/data

假設(shè)默認(rèn)用戶為ubuntu 則 ~ = /home/ubuntu

  1. 運行容器
docker run --detach --publish 8443:443  \
    --publish 8090:80 --publish 2222:22 \
    --name gitlab --restart always 
    -v /home/ubuntu/config/gitlab/config:/etc/gitlab   \
    -v /home/ubuntu/config/gitlab/logs:/var/log/gitlab \
    -v /home/ubuntu/config/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce

進(jìn)入http://localhost:8090即可進(jìn)入Gitlab頁面

  1. 查找容器ID
docker ps |grep gitlab/gitlab-ce
  1. 進(jìn)入容器
docker exec -it <容器ID> sh
  1. GitLab配置文件路徑 /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
  1. GitLab容器內(nèi)總開關(guān)命令
gitlab-ctl restart  // 重啟
gitlab-ctl stop      // 停止
gitlab-ctl start     // 啟動

二十三、補充

  1. git tag標(biāo)簽的使用
  2. 遠(yuǎn)端分支強制覆蓋本地對應(yīng)分支
git fetch --all  
git reset --hard origin/<branch_name>
git pull
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鳍征,一起剝皮案震驚了整個濱河市黍翎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌艳丛,老刑警劉巖匣掸,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異氮双,居然都是意外死亡碰酝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門戴差,熙熙樓的掌柜王于貴愁眉苦臉地迎上來送爸,“玉大人,你說我怎么就攤上這事〖盍В” “怎么了弄痹?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嵌器。 經(jīng)常有香客問我肛真,道長,這世上最難降的妖魔是什么爽航? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任蚓让,我火速辦了婚禮,結(jié)果婚禮上讥珍,老公的妹妹穿的比我還像新娘历极。我一直安慰自己,他們只是感情好衷佃,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布趟卸。 她就那樣靜靜地躺著,像睡著了一般氏义。 火紅的嫁衣襯著肌膚如雪锄列。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天惯悠,我揣著相機與錄音邻邮,去河邊找鬼。 笑死克婶,一個胖子當(dāng)著我的面吹牛筒严,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播情萤,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鸭蛙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了筋岛?” 一聲冷哼從身側(cè)響起规惰,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泉蝌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揩晴,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡勋陪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了硫兰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诅愚。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出违孝,到底是詐尸還是另有隱情刹前,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布雌桑,位于F島的核電站喇喉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏校坑。R本人自食惡果不足惜拣技,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耍目。 院中可真熱鬧膏斤,春花似錦、人聲如沸邪驮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅访。三九已至沮榜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間俺抽,已是汗流浹背敞映。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留磷斧,地道東北人振愿。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像弛饭,于是被迫代替她去往敵國和親冕末。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345