Git 筆記

三個區域

下面三個區域,是Git虛擬的區域,看不到,摸不著。

  • 工作區
    • 工作區,指的是使用Git管理后的文件,這些文件顯示在磁盤上,供我們使用或修改的區域。所以,粗略的說,項目文件夾就是工作區。
  • 暫存區域
    • 執行 git add .之后,文件由工作區,添加到了暫存區。 暫存區保存了下次將提交的文件列表信息。
  • Git 倉庫區、本地倉庫
    • 執行 git commit -m '提交說明' 之后,代碼會被提交到倉庫區。倉庫區是 Git 中最重要的部分,代碼只有提交到倉庫,才會形成一次歷史記錄,即才會形成一個版本。

在這里插入圖片描述

工作區新建的文件和Git沒有任何關系;文件被添加到暫存區,才叫做被Git管理過

記錄每次更新到倉庫

添加文件到暫存區

新文件,只有添加到暫存區,才叫做被Git管理。否則和Git沒什么關系,即使文件在項目文件夾。

# 添加指定文件到暫存區
$ git add 文件名# 以空格隔開可以一次 add 多個文件
$ git add [file1] [file2] ...# 添加指定目錄到暫存區,包括子目錄
$ git add [dir] [file] [dir] [file] [file] ...# 添加當前目錄的所有文件到暫存區,包括子目錄
$ git add .

提交文件到倉庫

提交到倉庫的文件,是暫存區中的文件。

# 提交暫存區到倉庫區
$ git commit -m [message]# 提交暫存區的指定文件到倉庫區
$ git commit [file1] [file2] ... -m [message]# 提交工作區和暫存區自上次commit之后的變化,直接到倉庫區。
# 新文件,從未被Git管理過,是不能直接提交到倉庫區的
$ git commit -a -m "提交日志"

在這里插入圖片描述

撤銷操作

撤銷操作,只能恢復暫存區或工作區,與最近一次提交的代碼一致。

# 恢復暫存區的指定文件到工作區
$ git checkout [file]# 恢復暫存區的所有文件到工作區
$ git checkout .# 恢復某個commit的指定文件到暫存區和工作區
$ git checkout [commit版本號] [file]# 重置暫存區的指定文件,與上一次 commit 保持一致,但工作區不變
$ git reset [file]# 重置暫存區與工作區,與上一次commit保持一致。該命令后不能加文件或文件夾
$ git reset --hard

在這里插入圖片描述

前文中,git checkout 版本號 能夠將代碼退回到歷史的任何版本,但不算是嚴格意義的回退,因為它叫做版本穿梭。具體見后文的分支管理。

分支管理

什么是分支

隨著git提交的次數越來越多,就會形成由各個版本連接而成的一條提交線。如下圖:

在這里插入圖片描述

由Git提交而形成的提交線,稱為分支。默認的分支是主分支,叫做 master,前面的學習,一直是在 master 分支上提交。

我們也可以創建其他分支,新創建的分支,相當于是原分支的一個拷貝

實際開發中

  • 為了保證代碼的安全性,不允許在主分支上進行開發
  • 需要創建其他分支,在其他分支上進行開發,這樣不會影響主分支上的代碼
  • 其他分支開發完成后,可以選擇將其他分支代碼合并到主分支上

創建其他分支

# 創建分支
git branch 分支名
# 比如
git branch dev# 切換分支到dev
git checkout dev# 也可以創建并直接切換分支
git checkout -b dev

切換分支之前,需要把當前分支的工作全部提交,否則不允許切換到其他分支。

實際開發中,鼓勵多使用分支。

快進模式合并兩個分支

快進模式合并

  • 兩個分支A和B
  • B分支包含A分支的最新版本,在合并的時候,叫做快進模式合并。
  • 快進模式合并,相當于使用B分支的代碼覆蓋A分支的代碼;同時版本也會更新到A分支

兩個分支合并,比如把 B 分支 合并到A分支上

  • 需要先切換到A分支
  • 然后執行 git merge B ,表示把B分支的代碼合并到A分支上。
# 切換到A分支
git checkout A# 把B分支的代碼合并到A分支
git merge B

合并模式合并兩個分支

合并模式

  • 兩個分支A和B
  • A分支有獨立的提交,B分支也有獨立的提交,在合并的時候,叫做合并模式的合并。
  • 合并模式,有可能會產生沖突;如果出現沖突,需要解決沖突,然后需要添加提交一次,從而完成合并。

兩個分支合并,比如把 B 分支 合并到A分支上

  • 需要先切換到A分支
  • 然后執行 git merge B ,表示把B分支的代碼合并到A分支上。
  • 如果看到 CONFLICT,則表示有沖突,需要打開有沖突的文件,手動解決沖突,然后添加、提交即可。
# 切換到A分支
git checkout A# 把B分支的代碼合并到A分支
git merge B

如果有沖突,會顯示如下提示:

在這里插入圖片描述

在這里插入圖片描述
手動打開有沖突的文件,解決沖突,保存文件。(手動解決)

再次添加(add操作)提交(commit),即可完成合并。

其他相關命令

# 查看所有分支(本地分支)
git branch# 查看所有分支(包括遠程分支)
git branch -a# 刪除分支(需要先切換到其他分支,然后在執行刪除)
git branch -d 分支名# 創建并直接切換分支
git checkout -b dev

如果要切換分支,必須把當前分支的代碼全部提交到本地倉庫。

穿梭到歷史后,如何使用歷史版本中的代碼

  • 穿梭到歷史的一個版本后,根據該版本創建一個分支,比如 B 分支
  • 在分支B中,修改需要使用的文件,然后提交(提交之后,后面的合并就會有沖突)
  • 回到之前的分支的最后一次提交的位置(切換回原來的分支)
  • 合并剛剛創建的新分支(B)即可

實際上就是為了練習分支。

遠程倉庫

說明

目前,我們的操作都是一個人開發,如果涉及到多人開發呢?大家的代碼如何合并到一起呢?這個時候就需要公網上的一臺服務器了,大家可以把代碼提交到這臺服務器上,也可以從服務器上拉取所有的代碼。這個公網上的服務器就叫做遠程倉庫。

完全可以自己搭建一臺運行Git的服務器,不過現階段,為了學Git先搭個服務器絕對是小題大作。好在這個世界上有個叫 GitHub 的神奇的網站,從名字就可以看出,這個網站就是提供Git倉庫托管服務的,所以,只要注冊一個GitHub賬號,就可以免費獲得Git遠程倉庫。

實際上,除了GitHib,還有很多第三方遠程倉庫托管服務:

  • GitHub(這個網站有時很難打開)
  • 碼云(gitee)(打開速度快)
  • coding
  • Gitlab

創建遠程賬號

配置SSH

在本地命令行,執行下面的命令,可以生成SSH秘鑰(包含一個公鑰一個私鑰)

ssh-keygen -t rsa -C "你的郵箱地址"
# 執行完這個命令之后,后面有一些詢問,我們直接一路回車即可

最后生成的秘鑰在:

Windows:
C:\Users\用戶名\.ssh   //  Users--用戶   GaoWei--我的計算機用戶名mac:
你的用戶名那個文件夾中。 按shift+Commend+.  可以顯示隱藏文件,然后就可以看到 .ssh文件夾了

找到 .ssh/id_rsa.pub,用vscode打開,復制里面全部的內容,配置到遠程倉庫

  • GitHub右上角的三角號
  • Settings
  • 左側有 SSH and GPG keys
  • 在顯示的界面中,點擊右上角的 New SSH key,然后完成添加公鑰操作

新建遠程倉庫

將本地倉庫中的代碼推送到遠程倉庫

推送的是本地倉庫的代碼。工作區和暫存區的代碼不會被推送到遠程倉庫

  • 復制遠程倉庫的 ssh 地址

在這里插入圖片描述

  • 本地倉庫中,執行

    # 添加遠程倉庫地址,讓我們的本地倉庫和遠程倉庫建立關聯
    # origin 可以自定義
    git remote add origin 遠程倉庫的ssh地址
    
  • 首次推送之前,需要先拉取遠程倉庫的代碼(README.md)到本地

    git pull origin master --rebase
    
  • 完成首次推送

    # 如果遠程沒有本地的 分支,第一次推送,需要加  -u
    git push -u origin master
    
  • 后續繼續開發

    # 改動了代碼,先添加到暫存區
    git add .
    # 提交到本地倉庫
    git commit -m 'xxxx'# 推送到遠程倉庫
    git push

注意事項

  • 什么時候需要先拉取,然后在推送
    • 遠程倉庫的提交比本地倉庫的要新,或者不一樣,都需要先拉取,然后在推送
  • 如果提示 “Are you sure you want to continue connecting (yes/no/[fi…])”
    • 輸入yes,回車

克隆遠程倉庫到本地

  • 實際開發中,有些時候,我們需要把別人倉庫的代碼克隆到本地

    • 下載別人的代碼的時候,可以選擇克隆
    • 多人合作開發的時候,需要克隆合作伙伴的代碼到本地
  • 克隆命令

    git clone 遠程倉庫的ssh地址
    
  • 克隆別人的倉庫到你的電腦中

    • 克隆,相當于下載。可以克隆下來,但是不能向別人的倉庫推送
  • 克隆的是自己的倉庫

    • 克隆下來,也可以推送

多人協作

  • 可以先創建遠程倉庫
  • 【可選】我先把基礎的代碼推送到遠程倉庫
  • 合作者,需要把遠程倉庫的代碼,克隆到你的計算機中
  • 管理員邀請合作者共同來開發
  • 合作者,需要同意
  • 然后,管理員和合作者,都可以向遠程倉庫推送代碼
    • 推送之前,必須先拉取。拉取之后,如果有沖突,解決沖突。然后推送。

如果遇到:

在這里插入圖片描述

點擊 “i” ,按上下左右鍵,調整光標的位置,然后刪除里面所有的內容,隨便寫一點也可以,但是不能太多。按esc,退出編輯模式,繼續按 “:wq” ,表示保存,并退出的意思。

后續,可以push。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/248037.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/248037.shtml
英文地址,請注明出處:http://en.pswp.cn/news/248037.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C# webapi 上傳下載圖片

客戶端上傳文件 string url url "webUploadFile";Uri server new Uri(url);HttpClient httpClient new HttpClient();MultipartFormDataContent multipartFormDataContent new MultipartFormDataContent();StreamContent streamConent new StreamContent(new F…

OC-@dynamic 關鍵字

dynamic這個關鍵詞,通常是用不到的。 它與synthesize的區別在于: 使用synthesize編譯器會確實的產生getter和setter方法,而dynamic僅僅是告訴編譯器這兩個方法在運行期會有的,無需產生警告。 假設有這么個場景,B類&…

git -- 練習的筆記

gitgitee.com:my_exercises/my_exercises.githttps://gitee.com/my_exercises/my_exercises/invite_link?invite3ab56c724a0aed34ae2bd193ce87e741e67fe05ee029cc01b7993663152babc57d76203fdafbbb42e766b0d826817bc91.在任意位置右鍵打開 2.初始化設置 3.添加遠程倉庫地址 4.…

Swift傻傻分不清楚系列(十二) 屬性

本頁包含內容: 存儲屬性(Stored Properties)計算屬性(Computed Properties)屬性觀察器(Property Observers)全局變量和局部變量(Global and Local Variables)類型屬性&a…

GIT — 使用回顧

回顧Git的使用 記錄每次的變更 工作區 --> 暫存區 git add . / git add 文件 文件夾 .... 工作區 --> 暫存區/本地倉庫 前提條件:文件曾經被添加到暫存區或提交到倉庫git commit -a -m 提交說明 暫存區 --> 本地倉庫 git commit -m 提交說明 / git commi…

獲取兩個數百分比的值

1 /**2 * 獲取兩個數百分比的值3 * 4 * param num1 5 * param num26 * param retain 保留小數位數7 * return8 */9 public static String numberFormat(int num1, int num2, int retain) { 10 NumberFormat numberFormat …

iOS AVAudioPlayer和AVAudioPlayerDelegate-音頻播放處理中斷

學習總是在進行。 一、AVAudioPlayer如何處理中斷 AVAudioPlayer類提供了代理方法&#xff0c;用來處理當播放音頻文件時&#xff0c;發生來電、鬧鐘等事件。設置代理并遵守AVAudioPlayerDelegate協議,<span style"font-family: Arial, Helvetica, sans-serif;"&g…

Ajax — 大事件項目(第一天)

應用的前端技術 Ajax (重要) — jQuery方式接口請求Layui 框架使用HTML CSS JS 項目說明和演示 線上 DEMO 項目地址&#xff1a;http://www.liulongbin.top:8086/項目的 API 接口地址&#xff1a; https://www.showdoc.cc/escook?page_id3707158761215217 項目請求根路徑…

JS,JQ 格式化小數位數

在<script>中&#xff1a; $(function(){   var num$(".price").length;/*獲取應用了class"price"的標簽數量*/   for(var i0;i<num;i){     if($(".price")[i].innerText!"")       $(".price")[i]…

iOS開發實用技巧—Objective-C中的各種遍歷(迭代)方式

說明&#xff1a; 1&#xff09;該文簡短介紹在iOS開發中遍歷字典、數組和集合的幾種常見方式。 2&#xff09;該文對應的代碼可以在下面的地址獲得&#xff1a;https://github.com/HanGangAndHanMeimei/Code 一、使用for循環 要遍歷字典、數組或者是集合&#xff0c;for循環是…

windows系統作為客戶端時,linux中本地yum源掛載時,如何同時掛載DVD1和DVD2?

這里以CentOS6.5為例.他的鏡像有兩個DVD1和DVD2.DVD1中是系統和主要的安裝包,DVD2中是剩下的安裝包 當掛載時如果要同時掛載DVD1和DVD2.需要這樣做: 1)在虛擬機的設置中選擇連接 2)分別在mnt下創建cdrom和cdrom1文件夾 3)到dev下查看有軟連接 cdrom->sr0 cdrom1->sr1 這里…

Ajax — 大事件項目(第二天)

大事件-02 fix一個bug 原因&#xff1a; 開始做注冊的時候&#xff0c;頁面中只有一個 namepassword的input&#xff0c;所以 $(‘input[name“password”]’) 可以準確的找到元素后來做登錄的時候&#xff0c;頁面中多了一個namepassword的input&#xff0c;所以$(‘input[…

OpenCV自帶dnn的Example研究(3)— object_detection

這個博客系列&#xff0c;簡單來說&#xff0c;今天我們就是要研究https://docs.opencv.org/master/examples.html下的6個文件&#xff0c;看看在最新的OpenCV中&#xff0c;它們是如何發揮作用的。在配置使用的過程中&#xff0c;需要注意使用較高版本的VS避免編譯器兼容問題&…

Ajax — 大事件項目(第三天)

大事件-03 用戶信息 表單驗證 html中&#xff0c;直接使用layui提供的內置驗證規則 email <input type"text" name"email" required lay-verify"required|email" placeholder"請輸入郵箱" autocomplete"off" class&q…

iOS中監測來電方案

問題 最近在做一個有錄音功能的App&#xff0c;要求當用戶接到來電時&#xff0c;要停止錄音。該如何實現這個功能呢&#xff1f; 解決方案 我首先想到了AppDelegate里的applicationWillResignActive:方法&#xff0c;在該方法的注釋中就寫到到收到來電或短信時&#xff0c;系統…

iOS運行時-使用Runtime向Category中添加屬性以及運行時介紹

前言 了解OC的都應該知道&#xff0c;在一般情況下&#xff0c;我們是不能向Category中添加屬性的&#xff0c;只能添加方法&#xff0c;但有些情況向&#xff0c;我們確實需要向Category中添加屬性&#xff0c;而且很多系統的API也有一些在Category添加屬性的情況&#xff0c;…

Ajax — cropper (圖片剪裁)基本用法

jQuery-cropper插件完整的API&#xff1a;http://www.jq22.com/jquery-info9322 1. 基本使用步驟 在 <head> 中導入 cropper.css 樣式表&#xff1a; <link rel"stylesheet" href"/assets/lib/cropper/cropper.css" />在 <body> 的結…

「短篇小說」靈囚 540 天

轉載&#xff1a;知乎 - BIMBOX 孫彬 - https://zhuanlan.zhihu.com/p/24655832 「我們總有一天會逾越那條上帝劃好的界限&#xff0c;而最終我們將無法面對真實和虛假&#xff0c;正義與罪惡。」 「不幸的是&#xff0c;從伊甸園那一次&#xff0c;我們就已經越界了。」 第十天…

iOS 夠逼格的注釋總結

首先關于注意這里就不說什么VVDocument了&#xff0c;來點新鮮的&#xff01; 也許你使用過#warning 警告提示 也許你也使用過#pragma marks。 但是你見過或者使用過下面這個嗎&#xff1f; Comments containing:MARK:TODO:FIXME:!!!:???: 沒有&#xff0c;那么你就快速的看…

Git圖形化管理工具

Git圖形化管理工具 注意&#xff1a;必須在創建的倉庫中進行右鍵打開 復制這段內容后打開百度網盤App&#xff0c;操作更方便哦。 鏈接&#xff1a;https://pan.baidu.com/s/1eXIk01LXSmzmXvYfw3MnEA 提取碼&#xff1a;J166 --來自百度網盤超級會員V5的分享 分類 sourceTr…