一、什么是git
- git是一個(gè)開(kāi)源的分布式版本控制系統(tǒng)紊婉,用于敏捷高效地各種大小型項(xiàng)目。
- git時(shí)Linus Torvalds為了幫助管理Linux內(nèi)核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼的版本控制軟件辑舷。
- git與常用的版本控制工具CVS喻犁、Subversion等不同,它采用了分布式版本庫(kù)的方式何缓,不必服務(wù)器端軟件支持肢础。
Git 與 SVN 區(qū)別
- git不僅僅是版本控制系統(tǒng),它也是內(nèi)容管理系統(tǒng)碌廓,工作管理系統(tǒng)登传轰;
- 如果你是個(gè)具有SVN背景的人,你需要做一定的思想轉(zhuǎn)換氓皱,來(lái)適應(yīng)git提供的一些概念和特征路召。
- git是分布式的勃刨,svn不是
- git是把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ)波材,而svn是按文件
- git分支和svn的分支不同,svn的分支就是版本庫(kù)中的另一個(gè)目錄
- git沒(méi)有一個(gè)全局的版本號(hào)身隐,而svn有
- git的內(nèi)容完整性要優(yōu)于svn:git的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法廷区,這能確保代碼內(nèi)容的完整性,確保在遇到磁盤(pán)故障和網(wǎng)絡(luò)問(wèn)題時(shí)降低對(duì)版本庫(kù)的破壞
二贾铝、安裝git
-
在CentOS 7中安裝git(源碼構(gòu)建安裝)
1隙轻、下載最新版本源碼
從該地址獲取:
https://mirrors.edge.kernel.org/pub/software/scm/git/
# 卸載之前yum裝的版本:
yum erase -y git
# 下載git
yum install -y wget
wget -O /tmp/git-2.21.0.tar.gz https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.21.0.tar.gz
2垢揩、解壓編譯
# 安裝編譯依賴(lài)項(xiàng)
yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
# 解壓
tar -zxf /tmp/git-2.21.0.tar.gz -C /tmp/
# 檢驗(yàn)相關(guān)依賴(lài)玖绿,設(shè)置安裝路徑
./configure --prefix=/usr/local/git
# 編譯安裝
make && make install
3.配置全局環(huán)境變量
# 配置環(huán)境變量
vim /etc/profile
# 配置環(huán)境變量
vim /etc/profile
# GIT_HOME
GIT_HOME=/usr/local/git
export PATH=$PATH:$GIT_HOME/bin
# 刷新
source /etc/profile
4、查看安裝好的git版本
git --version
-
Win10下安裝Git
1叁巨、先從官網(wǎng)下載最新版本的Git
點(diǎn)擊上圖中表示的地方進(jìn)行下載斑匪,得到Git-2.17.1.2-64-bit.exe文件。如果你的系統(tǒng)是32位的锋勺,可以通過(guò)如下方式下載:
2蚀瘸、雙擊下載好的git安裝包狡蝶,彈出提示框,如下圖:
3贮勃、直接點(diǎn)擊“Next”進(jìn)入下一步贪惹,選擇安裝路徑,如下圖:
4寂嘉、選擇好安裝路徑后奏瞬,點(diǎn)擊“Next”進(jìn)入下一步,彈出安裝配置窗口泉孩,包括git命令行丝格、git圖形窗口等,如下圖所示:
說(shuō)明:
- Additional icons -- 附加圖標(biāo)
? On the Desktop -- 在桌面上- Windows Explorer integration -- Windows資源管理器集成鼠標(biāo)右鍵菜單
? Git Bash Here
? Git GUI Here- Git LFS (Large File Support)
大文件支持- Associate .git* configuration files with the default text editor
將 .git 配置文件與默認(rèn)文本編輯器相關(guān)聯(lián)- Associate .sh files to be run with Bash
將.sh文件關(guān)聯(lián)到Bash運(yùn)行- Use a TrueType fint in all console windows
在所有控制臺(tái)窗口中使用TrueType字體- Check daily for Git for Windows updates
每天檢查Git是否有Windows更新
5棵譬、按照上述默認(rèn)配置显蝌,直接點(diǎn)擊“Next”進(jìn)入下一步,彈出“選擇開(kāi)始菜單文件夾”的窗口订咸,如下圖所示:
6曼尊、按照默認(rèn)路徑即可,直接點(diǎn)擊“Next”脏嚷,進(jìn)入下一步骆撇,進(jìn)入“選擇Git使用的默認(rèn)編輯器”窗口,如下圖所示:
說(shuō)明:
- Use the Nano editor by default
默認(rèn)使用 Nano 編輯器- Use Vim (The ubiquitous text editor) as Git's default editor
使用 Vim 作為 Git 的默認(rèn)編輯器- Use Notepad++ as Git's default editor
使用 Notepad++ 作為 Git 的默認(rèn)編輯器- Use Visual Studio Code as Git's default editor
使用 Visual Studio Code 作為Git 的默認(rèn)編輯器- Use Visual Studio Code Insiders as Git's default editor
使用Visual Studio Code Insiders 作為 Git 的默認(rèn)編輯器
7父叙、點(diǎn)擊“Next”神郊,進(jìn)入下一步,進(jìn)入“調(diào)整Path環(huán)境變量”窗口趾唱,如下圖所示:
配置PATH環(huán)境:
- Use Git from Git Bash only
僅從Git Bash中使用GitThis is the safest choice as your PATH will not be modified at all.You will only be able to use the Git command line tools form Git Bash.
這是最安全的選擇涌乳,因?yàn)槟腜ATH根本不會(huì)被修改。您只能使用 Git Bash 的 Git 命令行工具甜癞。
- Use Git from the Windows Command Prompt
在Windows命令提示符中使用GitThis option is considered safe as it only adds some minimal Git wrappers to your PATH to avoid cluttering your environment with optional Unix tools . You will be able to use Git from both Git Bash and the Windows Command Prompt.
這個(gè)選項(xiàng)被認(rèn)為是安全的夕晓,因?yàn)樗幌騊ATH添加一些最小的 Git包,以避免使用可選的Unix工具混淆環(huán)境悠咱。 您將能夠從 Git Bash 和 Windows 命令提示符中使用 Git蒸辆。
- Use Git and optional Unix tools from the Windows Command Prompt
從Windows命令提示符使用Git和可選的Unix工具Both Git and the optional Unix tools will be added to you PATH
Git和可選的Unix工具都將添加到您計(jì)算機(jī)的 PATH 中
- Warning:This will override Windows tools like "find and sort".Only use this option if you understand the implications.
警告:這將覆蓋Windows工具,如 “ find 和 sort ”析既。只有在了解其含義后才使用此選項(xiàng)躬贡。
8、選第二項(xiàng)眼坏,然后點(diǎn)擊“Next”進(jìn)入下一步拂玻,選擇HTTPS傳輸后端,如下圖所示:
說(shuō)明:
- Use the OpenSSL library
使用 OpenSSL 庫(kù)Server certificates will be validated using the ca-bundle.crt file.
服務(wù)器證書(shū)將使用ca-bundle.crt文件進(jìn)行驗(yàn)證。
- Use the native Windows Secure Channel library
使用本地 Windows 安全通道庫(kù)Server certificates will be validated using Windows Certificate Stores.This option also allows you to use your company's internal Root CA certificates distributed e.g. via Active Directory Domain Services.
服務(wù)器證書(shū)將使用Windows證書(shū)存儲(chǔ)驗(yàn)證纺讲。此選項(xiàng)還允許您使用公司的內(nèi)部根CA證書(shū)擂仍,例如, 通過(guò)Active Directory Domain Services 熬甚。
9逢渔、選擇"Use the OpenSSL library",點(diǎn)擊“Next”進(jìn)入下一步乡括,配置行結(jié)束符肃廓,如下圖所示:
說(shuō)明:
- Checkout Windows-style,commit Unix-style line endings
Git will convert LF to CRLF when checking out text files.When committing text files,CRLF will be converted to LF .For cross-pltform projects,this is the recommended setting on Windows ("core.autocrlf" is set to "true")
在檢出文本文件時(shí),Git會(huì)將LF轉(zhuǎn)換為CRLF诲泌。當(dāng)提交文本文件時(shí)盲赊,CRLF將轉(zhuǎn)換為L(zhǎng)F。 對(duì)于跨平臺(tái)項(xiàng)目敷扫,這是Windows上推薦的設(shè)置(“core.autocrlf”設(shè)置為“true”)
- Checkout as-is , commit Unix-style line endings
Git will not perform any conversion when checking out text files. When committing text files, CRLF will be converted to LF. For cross-platform projects,this is the recommended setting on Unix ("core.autocrlf" is set to "input")
在檢出文本文件時(shí)哀蘑,Git不會(huì)執(zhí)行任何轉(zhuǎn)換。 提交文本文件時(shí)葵第,CRLF將轉(zhuǎn)換為L(zhǎng)F绘迁。 對(duì)于跨平臺(tái)項(xiàng)目,這是Unix上的推薦設(shè)置 (“core.autocrlf”設(shè)置為“input”)
- Checkout as-is,commit as-is
Git will not perform any conversions when checking out or committing text files.Choosing this option is not recommended for cross-platform projects ("core.autocrlf"is set to "false")
在檢出或提交文本文件時(shí)卒密,Git不會(huì)執(zhí)行任何轉(zhuǎn)換缀台。對(duì)于跨平臺(tái)項(xiàng)目,不推薦使用此選項(xiàng)(“core.autocrlf”設(shè)置為“false”)
10哮奇、選擇第一項(xiàng)膛腐,點(diǎn)擊“Next”進(jìn)入下一步,配置終端模擬器鼎俘,如下圖所示:
說(shuō)明:
- Use MinTTY (the default terminal of MSYS2)
Git Bash will use MinTTY as terminal emulator,which sports a resizable window,non-rectangular selections and a Unicode font. Windows console programs (such as interactive Python) must be launched via 'winpty' to work in MinTTY.
Git Bash將使用MinTTY作為終端模擬器哲身,該模擬器具有可調(diào)整大小的窗口,非矩形選區(qū)和Unicode字體而芥。 Windows控制臺(tái)程序(如交互式Python)必須通過(guò)'winpty'啟動(dòng)才能在MinTTY中運(yùn)行律罢。
- Use Windows' default console window
Git will use the default console window of Windows ("cmd.exe"),which works well with Win32 console programs such as interactive Python or node.js , but has a very limited default scroll-back,needs to be configured to use aUnicode font in order to display non-ASCII characters correctly,and prior to Windows 10 its windows was not freely resizable and it only allowed rectangular text selections.
Git將使用Windows的默認(rèn)控制臺(tái)窗口(“cmd.exe”),該窗口可以與Win32控制臺(tái)程序(如交互式Python或node.js)一起使用棍丐,但默認(rèn)的回滾非常有限,需要配置為使用unicode 字體以正確顯示非ASCII字符沧踏,并且在Windows 10之前歌逢,其窗口不能自由調(diào)整大小,并且只允許矩形文本選擇翘狱。
11秘案、選擇第一項(xiàng),直接點(diǎn)擊“Next”進(jìn)入下一步,配置額外選項(xiàng)阱高,如下圖所示:
說(shuō)明:
- Enable file system caching
啟用文件系統(tǒng)緩存File system data will be read in bulk and cached in memory for certain operations ("core.fscache" is set to "true"). This provides a significant performance boost.
文件系統(tǒng)數(shù)據(jù)將被批量讀取并緩存在內(nèi)存中用于某些操作(“core.fscache”設(shè)置為“true”)赚导。 這提供了顯著的性能提升。
- Enable Git Credential Manager
啟用Git憑證管理器The Git Credential Manager for Windows provides secure Git credential storage for Windows,most notably multi-factor authentication support for Visual Studio Team Services and GitHub. (requires .NET framework v4.5.1 or or later).
Windows的Git憑證管理器為Windows提供安全的Git憑證存儲(chǔ)赤惊,最顯著的是對(duì)Visual Studio Team Services和GitHub的多因素身份驗(yàn)證支持吼旧。 (需要.NET Framework v4.5.1或更高版本)。
- Enable symbolic links
啟用符號(hào)鏈接Enable symbolic links (requires the SeCreateSymbolicLink permission).Please note that existing repositories are unaffected by this setting.
啟用符號(hào)鏈接(需要SeCreateSymbolicLink權(quán)限)未舟。請(qǐng)注意圈暗,現(xiàn)有存儲(chǔ)庫(kù)不受此設(shè)置的影響。
12裕膀、使用默認(rèn)配置员串,直接點(diǎn)擊“Install”開(kāi)始安裝,如下圖所示:
13昼扛、安裝完成:
三寸齐、使用git
1、創(chuàng)建用戶(hù)標(biāo)識(shí)
- 一旦在自己的操作系統(tǒng)上安裝完Git之后抄谐,需要告訴Git你的用戶(hù)名和電子郵件地址访忿,從而創(chuàng)建自己的用戶(hù)標(biāo)識(shí)。你的所有代碼提交都會(huì)與你的用戶(hù)標(biāo)識(shí)關(guān)聯(lián)斯稳。
- 下面的代碼會(huì)將你的個(gè)人標(biāo)識(shí)和系統(tǒng)偏好設(shè)置寫(xiě)入你的home目錄下的.gitconfig文件中(在UNIX和Mac上為\~海铆,而在Windows中則是%USERPROFILE%對(duì)應(yīng)的目錄)
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
2、git工作流程
-
工作區(qū)
- 程序員進(jìn)行開(kāi)發(fā)改動(dòng)的地方挣惰,是你當(dāng)前看到的卧斟,也是最新的。
- 平常我們開(kāi)發(fā)就是拷貝遠(yuǎn)程倉(cāng)庫(kù)中的一個(gè)分支憎茂,基于該分支進(jìn)行開(kāi)發(fā)珍语。在開(kāi)發(fā)過(guò)程中就是對(duì)工作區(qū)的操作。
-
緩存區(qū)
- git目錄下的index文件, 暫存區(qū)會(huì)記錄git add添加文件的相關(guān)信息(文件名竖幔、大小板乙、timestamp...),不保存文件實(shí)體, 通過(guò)id指向每個(gè)文件實(shí)體拳氢∧汲眩可以使用git status查看暫存區(qū)狀態(tài)。暫存區(qū)標(biāo)記了當(dāng)前工作區(qū)中馋评,哪些內(nèi)容是被git管理的放接。
- 當(dāng)你完成某個(gè)需求或功能后需要提交到遠(yuǎn)程倉(cāng)庫(kù),那么第一步就是通過(guò)git add先提交到暫存區(qū)留特,被git管理纠脾。
-
本地倉(cāng)庫(kù)
- 保存了對(duì)象被提交 過(guò)的各個(gè)版本玛瘸,比起工作區(qū)和暫存區(qū)的內(nèi)容,它要更舊一些苟蹈。
- git commit后同步index的目錄樹(shù)到本地倉(cāng)庫(kù)糊渊,方便從下一步通過(guò)git push同步本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)的同步。
-
遠(yuǎn)程倉(cāng)庫(kù)
- 遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容可能被分布在多個(gè)地點(diǎn)的處于協(xié)作關(guān)系的本地倉(cāng)庫(kù)修改慧脱,因此它可能與本地倉(cāng)庫(kù)同步渺绒,也可能不同步,但是它的內(nèi)容是最舊的磷瘤。
小結(jié)
- 任何對(duì)象都是在工作區(qū)中誕生和被修改芒篷;
- 任何修改都是從進(jìn)入緩存區(qū)才開(kāi)始被版本控制;
- 只有把修改提交到本地倉(cāng)庫(kù)采缚,該修改才能在倉(cāng)庫(kù)中留下痕跡针炉;
- 與協(xié)作者分享本地的修改,可以把它們push到遠(yuǎn)程倉(cāng)庫(kù)來(lái)共享扳抽。
3篡帕、git常用命令
1) 修改編輯項(xiàng)目常用
# 查看當(dāng)前倉(cāng)庫(kù)文件狀態(tài)(常在提交文件之前查看,會(huì)顯示新增文件刪除文件贸呢,已修改文件等狀態(tài))
git status
# 添加文件
git add . // 添加所有已修改文件
git add fileName // 添加指定文件名的文件(可在git status返回中復(fù)制)
# 提交修改說(shuō)明
git commit -m "修改的內(nèi)容" // 記錄當(dāng)前提交的主題 以便區(qū)分每次提交的內(nèi)容
# 拉取代碼
git pull // 拉取代碼 push之前pull一次代碼 (尤其多人開(kāi)發(fā)一定注意push之前先pull)
git pull origin <遠(yuǎn)程分支名> // 將遠(yuǎn)程指定分支 拉取到 本地當(dāng)前分支上
git pull origin <遠(yuǎn)程分支名>:<本地分支名> // 將遠(yuǎn)程指定分支 拉取到 本地指定分支上
git pull origin // 將與本地當(dāng)前分支同名的遠(yuǎn)程分支 拉取到 本地當(dāng)前分支上(需先關(guān)聯(lián)遠(yuǎn)程分支)
# 推送代碼
git push // 推送代碼到遠(yuǎn)程倉(cāng)庫(kù)
git push origin <本地分支名> // 將本地當(dāng)前分支 推送到 與本地當(dāng)前分支同名的遠(yuǎn)程分支上(注意:pull是遠(yuǎn)程在前本地在后镰烧,push相反)
git push origin <本地分支名>:<遠(yuǎn)程分支名> // 將本地當(dāng)前分支 推送到 遠(yuǎn)程指定分支上(注意:pull是遠(yuǎn)程在前本地在后,push相反)
git push origin // 將本地當(dāng)前分支 推送到 與本地當(dāng)前分支同名的遠(yuǎn)程分支上(需先關(guān)聯(lián)遠(yuǎn)程分支)
git push --set-upstream origin // <本地分支名>將本地分支與遠(yuǎn)程同名分支相關(guān)聯(lián)
2) 分支相關(guān)
git branch // 查看本地分支(名稱(chēng)前面加* 號(hào)的是當(dāng)前的分支)
git branch -a // 查看分支楞陷,遠(yuǎn)程分支會(huì)用紅色表示出來(lái)(如果你開(kāi)了顏色支持的話(huà))
git branch -vv // 查看本地分支和遠(yuǎn)程分支對(duì)應(yīng)關(guān)系
git remote // 列出所有遠(yuǎn)程主機(jī)
git remote update origin --prune // 更新遠(yuǎn)程主機(jī)origin(gitlab有新分支怔鳖,本地查看分支無(wú)法查看到的時(shí)候使用)
git branch -r // 列出遠(yuǎn)程分支
git branch -vv // 查看本地分支和遠(yuǎn)程分支對(duì)應(yīng)關(guān)系
git checkout -b dev origin/dev // 新建本地分支dev與遠(yuǎn)程dev分支相關(guān)聯(lián)
# 新建分支相關(guān)
git checkout -b newBranch
git push origin newBranch:newBranch // 把新建的本地分支push到遠(yuǎn)程服務(wù)器,遠(yuǎn)程分支與本地分支同名(可隨意起名)
# 刪除本地分支
git branch -D newBranch // 刪除本地 newBranch 分支
git checkout newBranch // 如果需要重新拉取遠(yuǎn)程的newBranch分支 執(zhí)行
# 刪除遠(yuǎn)程分支
git push origin :delBranchName
git push origin --delete delBranchName
# 切換分支,分支跟蹤固蛾, 本地分支和遠(yuǎn)程分支的關(guān)系
git branch branchName // 創(chuàng)建分支
git checkout branchName // 切換分支
git branch -d branchName // 刪除本地分支
git branch -r -d origin/branch-name
git push origin :branch-name // 刪除遠(yuǎn)程分支
# 如果遠(yuǎn)程新建了一個(gè)分支结执,本地沒(méi)有該分支,git checkout --track origin/ branchName ,這時(shí)本地會(huì)新建一個(gè)分支名叫 branchName艾凯,會(huì)自動(dòng)跟蹤遠(yuǎn)程的同名分支 branchName献幔。
git checkout --track origin/branchName
# 如果本地新建了一個(gè)分支 branchName,但是在遠(yuǎn)程沒(méi)有趾诗。這時(shí)候 push 和 pull 指令就無(wú)法確定該跟蹤誰(shuí)蜡感,一般來(lái)說(shuō)我們都會(huì)使其跟蹤遠(yuǎn)程同名分支,所以可以利用 git push --set-upstream origin branchName 恃泪,這樣就可以自動(dòng)在遠(yuǎn)程創(chuàng)建一個(gè) branchName 分支郑兴,然后本地分支會(huì) track 該分支。后面再對(duì)該分支使用 push 和 pull 就自動(dòng)同步悟泵。
git push --set-upstream origin branchName
# 合并分支(多人開(kāi)發(fā)中杈笔,經(jīng)常一人一個(gè)分支,各自在自己分支開(kāi)發(fā)糕非,開(kāi)發(fā)完成以后合并到某一個(gè)指定分支蒙具,沒(méi)有問(wèn)題后最后合并到master主分支,我們的流程是各自在自己的develop開(kāi)發(fā)朽肥,開(kāi)發(fā)完成以后合并到lastest分支禁筏,沒(méi)有問(wèn)題后提交合并申請(qǐng)到master分支,由leader審批是否統(tǒng)一合并到master衡招,因?yàn)楹芏嘈氯瞬惶宄a的具體用途篱昔,所以講的稍微詳細(xì)點(diǎn),明白命令的實(shí)現(xiàn)目的能更好的掌握使用始腾,后面會(huì)有具體的操作流程)
1.本地代碼依次
git status
git add
git commit -m ""
git pull
git push (develop-author分支州刽,即自己的開(kāi)發(fā)分支)
以后(把本地代碼推送到遠(yuǎn)程對(duì)應(yīng)分支)
2.git checkout lastest (切換到lastest分支)
3.git pull origin lastest (先把遠(yuǎn)程lastest分支修改內(nèi)容拉取,多人開(kāi)發(fā)浪箭,需要把遠(yuǎn)程lastest上的代碼pull下來(lái))
4.git merge develop-author (合并自己的分支到lastest)
4穗椅、常用命令詳解
HEAD
HEAD,它始終指向當(dāng)前所處分支的最新的提交點(diǎn)奶栖。你所處的分支變化了匹表,或者產(chǎn)生了新的提交點(diǎn),HEAD就會(huì)跟著改變宣鄙。
add
add相關(guān)命令很簡(jiǎn)單袍镀,主要實(shí)現(xiàn)將工作區(qū)修改的內(nèi)容提交到暫存區(qū),交由git管理冻晤。
* git add . : 添加當(dāng)前目錄的所有文件到暫存區(qū)
* git add <dir> : 添加指定目錄到暫存區(qū)苇羡,包括子目錄
* git add <file1> : 添加指定文件到暫存區(qū)
commit
commit相關(guān)命令也很簡(jiǎn)單,主要實(shí)現(xiàn)將暫存區(qū)的內(nèi)容提交到本地倉(cāng)庫(kù)鼻弧,并使得當(dāng)前分支的HEAD向后移動(dòng)一個(gè)提交點(diǎn)设江。
* git commit -m <message> :提交暫存區(qū)到本地倉(cāng)庫(kù),message代表說(shuō)明信息
* git commit <file1> -m <message> :提交暫存區(qū)的指定文件到本地倉(cāng)庫(kù)
* git commit --amend -m <message> :使用一次新的commit,替代上一次提交
branch
涉及到協(xié)作温数,自然會(huì)涉及到分支绣硝,關(guān)于分支,大概有展示分支撑刺,切換分支鹉胖,創(chuàng)建分支,刪除分支這四種操作够傍。
* git branch : 列出所有本地分支
* git branch -r : 列出所有遠(yuǎn)程分支
* git branch -a : 列出所有本地分支和遠(yuǎn)程分支
* git branch <branch-name> : 新建一個(gè)分支甫菠,但依然停留在當(dāng)前分支
* git checkout -b <branch-name> : 新建一個(gè)分支,并切換到該分支
* git branch --track <branch><remote-branch> : 新建一個(gè)分支冕屯,與指定的遠(yuǎn)程分支建立追蹤關(guān)系
* git checkout <branch-name> : 切換到指定分支寂诱,并更新工作區(qū)
* git branch -d <branch-name> : 刪除分支
* git push origin --delete <branch-name> : 刪除遠(yuǎn)程分支
merge
merge命令把不同的分支合并起來(lái)。如上圖安聘,在實(shí)際開(kāi)放中痰洒,我們可能從master分支中切出一個(gè)分支瓢棒,然后進(jìn)行開(kāi)發(fā)完成需求,中間經(jīng)過(guò)R3,R4,R5的commit記錄丘喻,最后開(kāi)發(fā)完成需要合入master中脯宿,這便用到了merge。
* git fetch <remote> : merge之前先拉一下遠(yuǎn)程倉(cāng)庫(kù)最新代碼
* git merge <branch> : 合并指定分支到當(dāng)前分支
一般在merge之后泉粉,會(huì)出現(xiàn)conflict连霉,需要針對(duì)沖突情況,手動(dòng)解除沖突嗡靡。主要是因?yàn)閮蓚€(gè)用戶(hù)修改了同一文件的同一塊區(qū)域跺撼。
reset
reset命令把當(dāng)前分支指向另一個(gè)位置,并且相應(yīng)的變動(dòng)工作區(qū)和暫存區(qū)讨彼。
* git reset —soft <commit> : 只改變提交點(diǎn)歉井,暫存區(qū)和工作目錄的內(nèi)容都不改變
* git reset —mixed <commit>: 改變提交點(diǎn),同時(shí)改變暫存區(qū)的內(nèi)容
* git reset —hard <commit>: 暫存區(qū)点骑、工作區(qū)的內(nèi)容都會(huì)被修改到與提交點(diǎn)完全一致的狀態(tài)
* git reset --hard HEAD : 讓工作區(qū)回到上次提交時(shí)的狀態(tài)
push
上傳本地倉(cāng)庫(kù)分支到遠(yuǎn)程倉(cāng)庫(kù)分支酣难,實(shí)現(xiàn)同步。
* git push <remote><branch> : 上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)
* git push <remote> --force : 強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù)黑滴,即使有沖突
* git push <remote> --all : 推送所有分支到遠(yuǎn)程倉(cāng)庫(kù)
* git push origin <本地分支名> :將本地當(dāng)前分支 推送到 與本地當(dāng)前分支同名的遠(yuǎn)程分支上(注意:pull是遠(yuǎn)程在前本地在后憨募,push相反)
* git push origin <本地分支名>:<遠(yuǎn)程分支名> :將本地當(dāng)前分支 推送到 遠(yuǎn)程指定分支上(注意:pull是遠(yuǎn)程在前本地在后,push相反)
* git push origin :將本地當(dāng)前分支 推送到 與本地當(dāng)前分支同名的遠(yuǎn)程分支上(需先關(guān)聯(lián)遠(yuǎn)程分支)
pull
拉取代碼袁辈,將本地的代碼更新至遠(yuǎn)程倉(cāng)庫(kù)里面最新的代碼版本菜谣。
* git pull : 拉取代碼 push之前pull一次代碼 (尤其多人開(kāi)發(fā)一定注意push之前先pull)
* git pull origin <遠(yuǎn)程分支名> :將遠(yuǎn)程指定分支 拉取到 本地當(dāng)前分支上
* git pull origin <遠(yuǎn)程分支名>:<本地分支名> :將遠(yuǎn)程指定分支 拉取到 本地指定分支上
* git pull origin :將與本地當(dāng)前分支同名的遠(yuǎn)程分支 拉取到 本地當(dāng)前分支上(需先關(guān)聯(lián)遠(yuǎn)程分支)
stash
git stash 常用于 多人開(kāi)發(fā)項(xiàng)目,例如:正式環(huán)境代碼在master晚缩,自己開(kāi)發(fā)在dev尾膊,當(dāng)你正在dev開(kāi)發(fā)或修改時(shí),正式環(huán)境有個(gè)緊急問(wèn)題需要解決荞彼,但是你dev分支的修改只進(jìn)行了一半冈敛,不方便提交時(shí)可以利用git stash 將工作區(qū)修改過(guò)的內(nèi)容臨時(shí)保存起來(lái),切換回master修改完緊急內(nèi)容會(huì)回來(lái)可以再取出來(lái)臨時(shí)保存的修改繼續(xù)操作鸣皂。
* git stash save "save message" : 執(zhí)行存儲(chǔ)時(shí)抓谴,添加備注,方便查找寞缝,只有g(shù)it stash 也要可以的癌压,但查找時(shí)不方便識(shí)別。
* git stash list :查看stash了哪些存儲(chǔ)
* git stash show :顯示做了哪些改動(dòng)荆陆,默認(rèn)show第一個(gè)存儲(chǔ),如果要顯示其他存貯滩届,后面加stash@{$num},比如第二個(gè) git stash show stash@{1}
* git stash show -p : 顯示第一個(gè)存儲(chǔ)的改動(dòng)被啼,如果想顯示其他存存儲(chǔ)帜消,命令:git stash show stash@{$num} -p 棠枉,比如第二個(gè):git stash show stash@{1} -p
* git stash apply :應(yīng)用某個(gè)存儲(chǔ),但不會(huì)把存儲(chǔ)從存儲(chǔ)列表中刪除,默認(rèn)使用第一個(gè)存儲(chǔ),即stash@{0}券犁,如果要使用其他個(gè)术健,git stash apply stash@{$num} 汹碱, 比如第二個(gè):git stash apply stash@{1}
* git stash pop :命令恢復(fù)之前緩存的工作目錄粘衬,將緩存堆棧中的對(duì)應(yīng)stash刪除,并將對(duì)應(yīng)修改應(yīng)用到當(dāng)前的工作目錄下,默認(rèn)為第一個(gè)stash,即stash@{0}咳促,如果要應(yīng)用并刪除其他stash稚新,命令:git stash pop stash@{$num} ,比如應(yīng)用并刪除第二個(gè):git stash pop stash@{1}
* git stash drop stash@{$num} :丟棄stash@{$num}存儲(chǔ)跪腹,從列表中刪除這個(gè)存儲(chǔ)
* git stash clear :刪除所有緩存的stash
有時(shí)也可通過(guò)這種方法實(shí)現(xiàn)避免或解決沖突褂删,當(dāng)你修改的內(nèi)容是最新的,但是你需要pull下來(lái)的代碼是需要被替換的冲茸,你pull的時(shí)候還是會(huì)沖突屯阀,可以先把你的修改stash臨時(shí)保存,pull完代碼以后在恢復(fù)stash的保存轴术,即可替換pull下來(lái)的需要被替換的代碼难衰,當(dāng)然不保存直接對(duì)比解決沖突也是可以的。