221. 最大正方形-dp-中等難度
分散式版本控制工具
-
基本使用
-
安裝
Git 官網直接下載安裝程式,右鍵選單中有
Git Bash
選項,點選彈出命令列視窗即安裝成功 -
初始配置
$ git config --global user.name "Your Name" $ git config --global user.email "Your email"
-
初始化倉庫
git init
設定當前目錄為 Git 可以管理的倉庫 -
檢視當前目錄檔案
ls -ah
-ah
引數展示所有檔案,包括隱藏檔案,如果這個倉庫為Git 管理的倉庫,就可以看到一個被隱藏的檔案.git
-
工作區,暫存區,版本庫
-
git add file
將工作區
file
的修改新增到暫存區git add file1 file2
可以新增多個檔案 -
git reset
git reset HEAD file
將暫存區檔案的修改放回工作區git reset --hard HEAD^
工作區回退到上一版本git reset --hard id
回退到 id 指定版本(就是用git log
中的id,只用寫前幾位即可) -
git commit
將暫存區的修改全部提交到版本庫
-
git commit -m 'add new file'
-m
引數,給提交新增說明
-
-
git checkout -- file
丟棄工作區該檔案的修改(實際就是用版本庫裡的版本代替工作區版本)
-
刪除檔案
rm file
-
-
除錯命令
-
git diff
檢視工作區和版本庫裡面最新版本的區別
git diff HEAD --file
指定檔案 -
git status
檢視倉庫當前狀態
-
git log
git log --graph --pretty=oneline --abbrev-commit
顯示在一條直線上檢視日誌
如果日誌很長,則按 q 退出
-
git reflog
記錄每一次命令
-
-
-
遠端倉庫
找一臺電腦充當伺服器角色,每天24小時開機,其他每個人從這個"伺服器"倉庫克隆一份到自己電腦上,並各自把各自的提交推送到伺服器倉庫裡,也從伺服器倉庫中拉取別人的提交
-
GitHub
GitHub 就是 Git 的一個遠端倉庫
-
關聯 GitHub 遠端倉庫
本地倉庫與 GitHub 倉庫之間的傳輸是通過 SSH 加密的(將自己的公鑰給 github , github 就能對你的每次提交進行身份認證)
-
建立
SSH Key
使用者目錄看是否有
.ssh
資料夾,如果有,看目錄下有沒有id_rsa
和id_rsa_pu
,如果有則已經建立過了SSH Key
,如果沒有,開啟 Git Bash,建立SSH key
ssh-keygen -t rsa -C "郵箱"
--> 一路回車 -
新增遠端庫
git remote add origin [email protected]:buxiaoxing/learngit.git
origin 就是 遠端庫的名字
-
刪除遠端庫
git remote rm origin
-
向遠端庫推送
git push -u origin master
第一次推送
git push origin master
以後推送
注:第一次推送報錯
connection timedout
時,在金鑰資料夾裡建立 config 檔案 -
檢視遠端倉庫資訊
git remote -v
-
從遠端庫克隆
git clone 倉庫地址
倉庫地址有 https 和 git 地址,但 https 較慢
-
-
-
Gitee
國內的 Git 託管服務,速度比 Github 快很多
同樣也是通過 SSH 金鑰進行身份認證
-
本地倉庫可以新增多個遠端倉庫(名稱要唯一)
$ git remote -v gitee [email protected]:buxiaoxing/learn-git.git (fetch) gitee [email protected]:buxiaoxing/learn-git.git (push) origin [email protected]:buxiaoxing/learngit.git (fetch) origin [email protected]:buxiaoxing/learngit.git (push)
-
-
搭建自己的 Git 伺服器
需要準備一臺執行Linux的機器,強烈推薦用Ubuntu或Debian
使用
gitblit
幫助建立 Git 伺服器
-
-
分支
建立一個屬於自己的分支,別人看不到,還繼續在原來的分支上正常工作,你在自己的分支上幹活。想提交就提交,知道開發完畢後,再一次性合併到原來的分支上,既安全又不影響別人工作
-
Git 上分支的實現
-
master
--> 指向最新的提交 -
HEAD
--> 指向當前分支一開始的時候,
master
分支是一條線,Git 用master
指向最新的提交,再用HEAD
指向master
,就能確定當前分支,以及當前分支的提交點建立一個分支
dev
git branch dev
切換到分支
git checkout/switch dev
建立並切換(等於前面兩個命令)
git checkout -b dev
或者git checkout -c dev
檢視當前分支
git branch
在
dev
上進行一次新的提交後,dev
指標往前移動一步,而master
指標不變dev
上的工作完成了,就可以把dev
合併到master
上,直接將master
指向dev
的提交就完成合並了合併分支
git merge dev
合併指定分支到當前分支合併完成後,還可以將
dev
分支刪除,就是將dev
指標刪除,我們就只剩下一條master
分支刪除分支
git branch -d dev
-
-
衝突
-
如果兩個分支對同一檔案的同一地方都進行了修改,這個時候合併兩個分支就會產生衝突
這個時候就需要手動解決衝突
-
修改後再提交,分支變化如圖
-
最後再將分支刪除
-
複製一個特定提交到當前分支
git chery-pick <提交的id-->可以通過 git log 檢視>
-
-
禁止使用快速合併分支
Fast forward
使用
Fast forward
模式,這種模式下,刪除分支後,會丟掉分支資訊,如果要強制禁用Fast forward
模式,Git 就會在merge
時生成一個新的 commit ,從歷史資訊就可以看出分支資訊git merge --no-ff -m 'merge with no-ff' dev
因為本次合併要建立一個新的 commit ,所以加上 -m 引數,把 commit 的描述寫進去
注:
Fast forward
合併就只是將 master 的指標指向 dev,並沒有提交操作,而禁用Fast forward
就相當於 master 在自己分支上做了一次與 dev 上相同的提交 -
工作現場'儲藏'
有時候我們在 dev 上的工作還沒有完成,我們需要去其他分支工作,此時就可以將 dev 的工作現場 '儲藏'起來
-
git stash
當前工作現場'儲藏起來',以後可以恢復現場繼續工作(不能追蹤到沒有 add 過的檔案,所以在我們儲藏工作現場時確保所有檔案都是 add 過的)
-
git stash list
檢視工作現場儲藏位置 -
git stash apply
恢復stash
中的內容,但stash
中的內容不刪除git stash apply stash@{0}
恢復指定stash
-
git stash pop
恢復的同時刪除stash
的內容
-
-
多人協作(遠端倉庫分支管理)
-
git remote -v
顯示遠端倉庫詳細資訊
$ git remote -v origin [email protected]:buxiaoxing/learngit.git (fetch) origin [email protected]:buxiaoxing/learngit.git (push)
fetch
:抓取倉庫push
:推送倉庫 -
推送衝突
-
git pull
拉取遠端倉庫最新修改
如果提示
no tracking information
,則說明本地分支和遠端分支的連結關係沒有建立,用命令git branch --set-upstream-to=origin/dev dev
-
最新修改與本地修改有衝突,則手動修改
-
沒有衝突或解決衝突後,再用
git push origin dev
推送
-
-
-
Rebase
挪動本地提交位置,把分叉的提交歷史“整理”成一條直線,看上去更直觀
git rebase
-
-
標籤
釋出一個版本時,我們通常現在版本庫中打一個標籤(tag),這樣就唯一確定了打標籤時刻的版本,通過 commit 號也可以唯一標識,但 commit 號不便於記憶
-
git tag <tagname>
git tag v1.0
預設標籤是打到最新提交的 commit 上的
-
git tag <tagname> <commit id>
將標籤打到指定 commit 上
git tag -a v0.1 -m 'version 0.1 released' 1094adb
-a
引數指定標籤名-m
引數指定說明文字 -
git tag
檢視所有標籤
-
git show <tagname>
檢視標籤具體資訊
-
git tag -d <tagname>
刪除一個標籤
-
git push origin <tagname>
建立的標籤都只會儲存到本地,不會自動推送到遠端,所以打錯的標籤可以在本地安全刪除
將標籤推送到遠端
git push origin --tags
一次性推送全部尚未推送到遠端的本地標籤
-
刪除遠端標籤
git tag -a v0.9
先刪除本地的標籤git push origin :refs/tags/v0.9
刪除遠端標籤
-
-
自定義 Git
-
忽略特殊檔案
有些時候必須把某些檔案放在 Git 工作目錄中,但又不能提交他們,比如儲存了資料庫密碼的配置檔案,但每次
git status
都會顯示Untracked file ……
,看起來不舒服可以在Git工作區的根目錄下建立一個特殊的
.gitignore
檔案,然後把要忽略的檔名填進去# Windows: Thumbs.db ehthumbs.db Desktop.ini # Python: *.py[cod] *.so *.egg *.egg-info dist build # My configurations: db.ini deploy_key_rsa
最後再將
.gitignore
檔案提交到 Git -
配置別名
給命令配置別名
buxiaoxing@buxiaoxing-PC MINGW64 /f/工具/git/git repository (master) $ git config --global alias.st status buxiaoxing@buxiaoxing-PC MINGW64 /f/工具/git/git repository (master) $ git st On branch master Your branch is up to date with 'gitee/master'. nothing to commit, working tree clean
-
配置檔案
-
配置Git的時候,加上
--global
是針對當前使用者起作用的,如果不加,那隻針對當前的倉庫起作用。 -
配置檔案放哪了?每個倉庫的Git配置檔案都放在
.git/config
檔案中:
-
-