@[toc]
一遏弱、Git配置
使用 Git Bash 控制臺操作
- 初始化
git init
-
.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)廢棄無須理會
查看用戶名與郵件配置(查看改動記錄非常方便)
git config user.name
git config user.email
- 設(shè)置(修改)用戶名與郵件
git config --global user.name "hahadasheng"
git config --global user.email "liuchnegdage@sina.com"
- 修改配置信息(低版本)
git config --global --replace-all user.name "lc"
可以直接修改全局配置文件,在用戶主目錄下未玻;比如Windows的在當(dāng)前用戶的用戶文件夾下
C:\Users\administrator\.gitconfig
- 允許命令超長路徑
# git 設(shè)置支持超長路徑
git config --system core.longpaths true
- 配置代理 一般正規(guī)點的公司都有防火墻,上網(wǎng)需要代理服務(wù)器
git config --global http.proxy http://some.name.you.know:80
二旨剥、鑒權(quán) 拉取代碼
1). SSH 推薦
- 生成非對稱加密密鑰對
ssh-keygen
將
~/.ssh/id_rsa.pub
的內(nèi)容拷貝到托管平臺克隆代碼
git clone
- 拉去代碼
git pull
2). HTTP(S) 不方便机久,不推薦
- 直接 clone (指定文件可選,建議不寫) 輸入托管平臺的用戶名密碼
git clone <url> [localDirName]
- 緩存用戶名密碼
# 默認(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ū)域
- 拉取遠(yuǎn)程代碼
git pull
- 如果拉取失敗, 一般是本地未提交的修改的文件與與服務(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ū)域,記錄不會被刪除
檢查是否有沖突竿痰,如果有則手動解決
檢查改動文件 (可選)脆粥,顯示為紅色
git status
* Untracked: 未跟蹤,一般為新增文件,此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過git add 狀態(tài)變?yōu)镾taged.
* Modified: 文件已修改, 僅僅是修改, 并沒有進(jìn)行其他的操作.
* deleted: 文件已刪除菇曲,本地刪除冠绢,服務(wù)器上還沒有刪除.
* renamed:文件名稱被改變
- 如果發(fā)現(xiàn)無意編輯了一個文件,可以將其還原到修改前的狀態(tài)
# 還原指定文件
git checkout -- <fileName>
# 還原所有文件
git checkout .
- 將文件添加到暫存區(qū)
# 添加工作區(qū)指定修改文件到暫存區(qū)
git add <file>
# 添加所有修改文件到暫存區(qū)(忽略文件除外)
git add .
此時
git status
時在暫存區(qū)的文件顯示為綠色
- 如果想取消添加到暫存區(qū)
git rm --cached <fileName>
--cached
作用為指定暫存區(qū)常潮;不寫默認(rèn)則為工作區(qū)
- 提交到本地倉庫
git commit . -m "commit message"
.
標(biāo)識選擇暫存區(qū)所有文件弟胀,如果只需要指定文件換成對應(yīng)文件名即可。
- 最簡單的提交方式
git push
四喊式、diff 比較不同
1). 同個分支下的比較
- 查看工作區(qū)與暫存區(qū)文件的修改情況
# 查看所有文件
git diff
# 查看指定文件
git diff <fileName>
紅色的-號代表刪除的內(nèi)容孵户;綠色的加號表示添加的部分
- 查看暫存區(qū)與本地版本庫的對比
# 查看所有文件
git diff --cached
# 查看指定文件
git diff --cached <fileName>
- 查看歷史提交記錄的哈希值
git log
commit 后面的哈市值則為對應(yīng)的提交哈希值
- 工作區(qū)與對應(yīng)的歷史提交對比
git diff hash值 [<fileName>]
- 暫存區(qū)與提交記錄對比
git diff --cached hash值 [<fileName>]
- 將工作區(qū)和暫存區(qū)文件與最新的版本庫比較
git diff HEAD
HEAD代表當(dāng)前所在的分支名,如果想比較其他分支可以將其改為其他分支名
- 比較兩個歷史記錄
git diff hash值1 hash值2
- 工作區(qū)與歷史版本進(jìn)行比較
# 指定比較的歷史版本
git diff <commit_hash>
# 比較最近的一次提交
git diff
- 比較兩個歷史版本
git diff <commit_hash1> <commit_hash2>
2) 不同分支下的比較
- 查看兩個不同的分支有哪些文件不一樣
git diff branch1 branch2 --stat
- 顯示文件具體修改
git diff branch1 branch2 filename
- 顯示全部文件修改(如果文件多則會眼花繚亂)
git diff branch1 branch2
- 查看一個分支有而另一個沒有
# 查看dev有的記錄但是master沒有的記錄
git log dev ^master
- 單純比較差異岔留,顯示所有記錄
git log branch1..branch2
有綠色顯示的表示只在哪個分支上有夏哭,另一個沒有
- 查看各個記錄存在于哪些分支上
git log --left-right develop...test
commit后面有
<
表示develop;>
表示為test分支的提交記錄
- 顯示當(dāng)前分支與其他分支最新版本進(jìn)行比較
git diff <orher branch>
- 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)限問題
- Git會記錄文件的權(quán)限献联,如果本地與版本庫同一個文件需要合并竖配,如果存在權(quán)限不一致則會產(chǎn)生沖突何址,實際工作中是幾乎不會讓Git記錄文件的權(quán)限,可以配置一下讓Git忽略文件的權(quán)限
# 項目局部配置
git config core.filemode false
# 全局配置
git config --global core.filemode false
六进胯、忽略指定文件或目錄
項目中的一些編譯文件用爪,或者不想提交的配置文件等可以過濾掉
- 在項目的工作區(qū)創(chuàng)建一個
.gitignore
的文件,Win下建議使用notepad++的另存為進(jìn)行創(chuàng)建胁镐,直接創(chuàng)建文件會失敗 - 每行代表一個忽略的文件偎血,支持通配符,支持文件夾盯漂,支持文件
# 文件的忽略方式
.jeckins.ini
# 文件夾以及其下的所有文件
target/
.idea/
# 通配符
*.iml
# 防止通配符導(dǎo)致向提交的文件被忽略(如果是直接忽略則無效)
!want.jar
- 添加忽略的文件
.gitignore
配置有誤的檢查
git check-ignore -v <fileName>
- 強制添加被忽略的文件
git add -f haha.iml
- 保留忽略的文件夾下部分文件寫法
# 忽略的文件夾
test/*
# 過濾的被忽略的文件夾下的文件
!test/index.html
上述的
*
號通配符必須得保留才能生效
- 忽略已經(jīng)提交
commit
的文件(夾)颇玷,先在.gitignore
中設(shè)置該文件(夾)為忽略,然后從暫存區(qū)中刪除
# 移除緩存中的文件
git rm --cached <fileName>
# 如果是文件夾則需要在加一個參數(shù)
git rm -r --cached <dirName>
# 提交此次修改就缆,由于忽略文件中已經(jīng)忽略了此文件夾和文件帖渠,需要強制添加 -f
git add -f <dirName>
七、分支管理
- 查看本地分支 綠色表示當(dāng)前分支
git branch
- 查看本地和遠(yuǎn)程所有分支
git branch -a
- 查看遠(yuǎn)程倉庫信息
git remote show origin
- 切換到遠(yuǎn)程或者本地分支(遠(yuǎn)程或者本地已經(jīng)存在的分支)
git checkout <exist branch>
- 新建本地分支 (將當(dāng)前分支的版本拷貝過去)
git checkout -b <new branch>
- 將本地新建的分支推送到服務(wù)器
git push --set-upstream origin <new branch>
- 合并分支
git merge <other branch>
查看合并的結(jié)果
git log
哈希值后面有個(HEAD -> branch1,branch2) 就是合并的記錄
- 普通刪除分支违崇,可避免數(shù)據(jù)丟失
git branch -d <branch name>
- 如果普通無法刪除阿弃,使用強制刪除分支
git branch -D <branch name>
- 恢復(fù)刪除的分支
git branch <branch name> <hash value>
八、回滾提交羞延,不會滾代碼
工作中,有時提交的代碼審核沒有過(CI/KW等)脾还,被abandon了伴箩;后續(xù)可以在本地進(jìn)行追加提交(中途不能有自己的新提交),但是有時候就想放棄此次提交鄙漏,或者本地提交后想要丟棄嗤谚,可以使用reset命令
- 查看需要回滾的提交節(jié)點,拷貝對應(yīng)的哈希值(推薦直接在idea工具中操作)
git log
- 進(jìn)行回滾
git rebase //將自己的提交放在前面,這樣下方的reset就只回到上個版本就可以了
git reset 哈希值
- 如果想撤銷最近的一次提交
git reset HEAD^
- 如果想撤銷修改的代碼
# 撤銷某個文件并查看狀態(tài)
git checkout filename && git status
# 撤銷所有的修改到上次提交的位置
git checkout .
九怔蚌、刪除過期的分支巩步,清理無意義數(shù)據(jù)
清理不需要的分支數(shù)據(jù),提高響應(yīng)速度
- 查看所有分支列表
git branch -a
紅色的為遠(yuǎn)程分支
- 刪除遠(yuǎn)程分支
git push origin --delete <remote branch>
控制臺顯示 deleted 表示刪除成功
- 將遠(yuǎn)程分支與本地分支進(jìn)行對比
git remote prune origin
- 查看本地分支的標(biāo)注情況
git branch -vv
對應(yīng)分支后面如果有
:gone
的標(biāo)識則表示遠(yuǎn)程分支已經(jīng)被刪除桦踊,該分支可以被清理
- 刪除本地分支
git branch -d <branchName>
十椅野、配置多個遠(yuǎn)端倉庫:把代碼推送到不同的服務(wù)器
1) 每個倉庫分別對應(yīng)一個遠(yuǎn)程地址
配置多個遠(yuǎn)程倉庫
- 查看當(dāng)前地址
git remote -v
默認(rèn)的倉庫為origin; 顯示的信息有
push
和fetch
兩種
執(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
- 添加多個倉庫
一般默認(rèn)的倉庫名為origin
git remote add <新的倉庫名> <遠(yuǎn)程倉庫地址>
- 提交代碼時選擇倉庫
# review 提交方式
git push origin head:refs/for/master
# 直接提交方式
git push github master
# 不寫倉庫則push到默認(rèn)倉庫
git push
- 修改默認(rèn)指定倉庫
git push -u github
- 刪除倉庫
# 刪除指定的倉庫
git remote remove <倉庫名稱>
2) 一個倉庫對應(yīng)多個遠(yuǎn)程地址
執(zhí)行一條命令杖狼,將代碼往兩個地址同時推送
- 向origin倉庫中添加多個地址
git remote set-url --add origin <remoteAddr>
十一炼蛤、代碼覆蓋
1) 本地覆蓋遠(yuǎn)端
如果不小心提交了錯誤的信息到遠(yuǎn)程,可以用新的提交來覆蓋蝶涩,但是如果是敏感信息理朋,這種方式顯然有缺點絮识,因為提交記錄中還是可以查看到;不推薦使用此種方式嗽上;
- 查看需要回滾提交的哈希值
git log
- 回滾本地提交次舌,不會滾代碼改動
git reset <哈希值>
- 強制推送到遠(yuǎn)程
git push origin -f
此類命令比較危險,一般在托管品臺比如GitLab上會對類似的操作進(jìn)行權(quán)限設(shè)置
2) 遠(yuǎn)端覆蓋本地
- 拉取遠(yuǎn)程最新代碼炸裆,但是不進(jìn)行合并
git fetch
- 將當(dāng)前工作的差異部分丟棄掉垃它,完全與目標(biāo)保持一致
git reset --hard origin/master
這里origin/master則是目標(biāo)比較分支
十二、恢復(fù)已刪除的分支烹看,文件等
前提是沒有執(zhí)行
git gc
清除信息国拇,一般如果不手動執(zhí)行此命令,git會對那些無用的object保留很長的時間
1) 恢復(fù)已刪除的分支
- 顯示分支管理命令 找到要恢復(fù)分支的某次提交前面的 commit_id
git reflog show
- 建立新的分支并進(jìn)行恢復(fù)
git checkout <新取一個分支名稱> <commit_id>
通過此種方式則重建的刪除的分支
2) 回滾reset操作
如果想找回
git reset
之前的提交記錄
- 查看操作歷史
git reflog
- 找到reset之前的commit_id并回退到那個id即可
git reset --hard <commit_id>
3) 從歷史版本中找回刪除的文件
- 查看操作歷史
git reflog
- 找到需要找回對應(yīng)的commit_id
git checkout <commit_id> <需要找回的文件名稱>
十三惯殊、單獨回滾代碼 記錄不變只回滾代碼
reset命令會回滾記錄酱吝,如果遠(yuǎn)程由此記錄,并禁止強制提交土思;則此時可以
使用revert命令只回滾代碼
- 查詢需要回滾代碼的分支commit_hash(比如向撤銷此次提交的代碼修改)
git log
- 回滾需要撤銷的提交
git revert <對應(yīng)的commit_hash>
注意务热,撤銷對飲的提交,revert后面的hash就是對應(yīng)的那次提交
命令執(zhí)行后會彈出一個合并代碼的提示框,編輯好信息后
esc
:x
進(jìn)行保存退出
再通過git log
發(fā)現(xiàn)多了一條Revert的記錄己儒,說明已經(jīng)成功崎岂;此時可以用git diff <被回退的提交hash>
可以發(fā)現(xiàn)被回退的提交修改已經(jīng)被放棄了。提交代碼
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)行合并厂僧,不過濾特定文件
- 切換到需要合并的分支,比如將dev合并到test分支
git checkout test
- 將dev合并到test分支
git merge dev
如果出現(xiàn)沖突了牛,建議使用工具手動解決沖突颜屠,(比如使用IEDA的Git解決沖突)
將解決后的沖突文件添加到暫存區(qū)并提交一個新的版本 (工具可能會自動執(zhí)行這一步)
git add . && git commit -a
解決沖突后的提交需要使用
-a
選項
2) 忽略有沖突文件的合并
- 上述案例中的dev項目工作區(qū)添加一個文件
.gitattributes
寫入內(nèi)容
<忽略沖突文件的文件名> merge=ours
- 按照上述合并操作進(jìn)行合并
合并后的test分支中對應(yīng)文件如果和dev有沖突則保留原來的內(nèi)容辰妙,如果沒有沖突也會進(jìn)行合并
十五、鉤子事件
Git進(jìn)一步學(xué)習(xí)可以研究哈甫窟,目前只是了解
1) 客戶端鉤子事件
- 鉤子事件在一些特定命令執(zhí)行時觸發(fā)
- 鉤子函數(shù)腳本在
.git/hooks
下面 - 鉤子語法使用的為shell腳本密浑,部分混雜了Perl代碼,可以Pytho或者其他腳本語言編寫
- 鉤子觸發(fā)的腳本文件需要正確命名粗井,以.sample結(jié)尾的腳本文件尔破,
- 一般情況下鉤子觸發(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ù)端接受推送時事件處理
- 服務(wù)端的鉤子同樣在
.git/hooks
下 - 服務(wù)端的鉤子配置一般是在托管平臺進(jìn)行管理
十六蚁阳、合并代碼保留提交記錄:rebase功能的使用
rebase與merge功能類似铃绒,但有所不同
-
git rebase
會將另外一個分支提交的所有新版本記錄復(fù)制到當(dāng)前分支中
2.切換到合并的分支,比如test
git checkout test
git rebase dev
merge與rebase的相似點:代碼層面沒有什么變化
-
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)沖突可以很方便解決
- 在對應(yīng)分支確定需要cherry-pick的提交
git log
- 切換到需要合并的分支
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
合并修改悼枢,如果有沖突則解決沖突。
- 執(zhí)行stash命令
git stash
- 查看stash棧中存放的記錄
git stash list
- 從stash棧中恢復(fù)棧頂?shù)牡奶峤?并保持棧頂?shù)挠涗?/li>
git stash apply
- 從stash棧中恢復(fù)指定的提交,并保持對應(yīng)的記錄
git stash apply <編號如stash@{0}>
- 從stash棧中彈出棧頂?shù)脑仄⒉穑瑮V斜粡棾龅膭t不會保留
git stash pop
- 清除stash棧中指定的提交
git stash drop <提交的id比如stash@{1}>
- 清空stash棧中的信息
git stash clear
十九馒索、解決臨時緊急任務(wù)的開發(fā)思路
場景復(fù)現(xiàn):dev分支正在開發(fā)下一個迭代版本莹妒,預(yù)計2個月;test分支為當(dāng)前發(fā)布線上版本绰上;
先有一個必須在一周上線的緊急任務(wù)旨怠!-
設(shè)計思路:
- 從test中新建一個分支 temp,并在temp中完成緊急開發(fā)。
- 將temp中新的提交記錄通過
git rebase
的方式經(jīng)提交記錄復(fù)制到test版本中進(jìn)行測試上線 - 為了避免將來代碼合并產(chǎn)生沖突蜈块,將temp中的新提交
git rebase
到dev開發(fā)分支中
二十鉴腻、代碼沖突解決總結(jié)
-
git merge
和git pull
命令導(dǎo)致的沖突,處理完沖突后使用git commit -a
百揭; -
git rebase
命令導(dǎo)致的沖突爽哎,處理完沖突之后使用git rebase --continue
或git rebase --skip
; -
git stash apply
命令導(dǎo)致的沖突信峻,處理完沖突之后使用git add .
即可倦青。 - 終極解決方案:使用IDEA或者烏龜git處理沖突,直觀盹舞、大氣产镐、方便、效率高
二十一踢步、Git瘦身方案
1) 克隆最后一個版本癣亚,避免Git拉去所有的歷史版本導(dǎo)致緩慢
- 本地克隆
git clone <remoteAddr> --depth==1
代碼不會改變,只是歷史提交記錄只有一條
2) 清空版本記錄
- -新建本地干凈分支获印,只保留最后一次版本信息
git checkout --orphan <new_branch_name>
- 刪除久的分支
git branch -D <branch_name>
- 將新的分支重命名為原有分支
git branch -m <branch_name>
- 強制推送到遠(yuǎn)程服務(wù)器(臨時關(guān)閉強制推送限制)
git push -f origin <branch_name>
3) 清理大文件(比較高級)
使用
git branch-filter
可以遍歷 Git 的版本歷史信息
- 找出大文件對應(yīng)的hash值述雾,這里一找出前5個為例
git verify-pack -v .git/objects/pack/pack-*.idx | sort -k 3 -g | tail -5
- 根據(jù)hash值找到對應(yīng)文件名
git rev-list --objects --all | grep <hash_value>
- 執(zhí)行刪除文件命令
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <file_name>'
- 刪除無用的記錄信息
rm -rf .git/refs/original/ && git reflog expire --expire=now --all
- 重新建立文件與 Git 倉庫的關(guān)聯(lián)關(guān)系
git fsck --full --unreachable
- 重新壓縮代碼,減少倉庫體積
git repack -A -d
- 執(zhí)行GC兼丰,清理垃圾
git gc --aggressive --prune=now
- 強制推送到遠(yuǎn)程
git push --force origin master
二十二玻孟、Docker快速搭建GitLab
1) 快速搭建Docker環(huán)境
Linux環(huán)境Docker安裝略
- 拉去鏡像
docker pull gitlab/gitlab-ce
- 創(chuàng)建本地持久化卷
mkdir -p ~/config/gitlab/config
mkdir -p ~/config/gitlab/logs
mkdir -p ~/config/gitlab/data
假設(shè)默認(rèn)用戶為ubuntu 則
~ = /home/ubuntu
- 運行容器
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頁面
- 查找容器ID
docker ps |grep gitlab/gitlab-ce
- 進(jìn)入容器
docker exec -it <容器ID> sh
- GitLab配置文件路徑
/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
- GitLab容器內(nèi)總開關(guān)命令
gitlab-ctl restart // 重啟
gitlab-ctl stop // 停止
gitlab-ctl start // 啟動
二十三、補充
- git tag標(biāo)簽的使用
- 遠(yuǎn)端分支強制覆蓋本地對應(yīng)分支
git fetch --all
git reset --hard origin/<branch_name>
git pull