git常用命令(git github ssh)

目錄

  • 1、語法說明
  • 2、本地倉庫相關操作
    • 建立一個git文件(git init)
    • 把工作區的文件添加到暫存區(git add)
    • 把暫存區的文件添加到本地倉庫(git commit)
    • 查看暫存區和本地倉庫中的文件(git ls-files)
    • 查看文件夾下所有文件的狀態(git status)
    • 查看版本庫中的提交記錄(git log)
    • 恢復的文件(git checkout)
    • 版本退回(git reset)
    • 查看本地倉庫文件和暫存區文件中的內容(git show)
    • 文件差異對比(git diff)
  • 忽略文件(.gitignore)
  • 3、SSH簡介(密鑰,GitHub)
    • 在本地生成公鑰和私鑰
    • 在GitHub中添加公鑰
  • 4、遠程倉庫(GitHub)相關操作
    • 下載GitHub上的代碼(git clone)
    • 下載被更新代碼(git pull)
    • 上傳修改的代碼(git push)

1、語法說明

被”< >“和"[ ]“包含起來的內容表示用戶自己選定的參數。但”< >“是要求用戶必須輸入的,而”[ ]"表示用戶可以根據自己的需要選擇輸入。
比如git reset的語法是這樣的:

git reset commit <commitid> --[option]

其中commitid指的是commit id,可以理解為每一提交到本地倉庫之后該倉庫狀態的ID,利用這個ID我們可以快速定位到某個狀態。
那么以下兩個種方式都是合理的:

git reset commit 7b0dcac
git reset commit 7b0dcac --soft

2、本地倉庫相關操作

建立一個git文件(git init)

用git Bash進入一個新的文件夾,輸入以下命令可以建立一個git文件。

git init

查看一下是否有.git文件
在這里插入圖片描述

把工作區的文件添加到暫存區(git add)

git add <object_file>

把暫存區的文件添加到本地倉庫(git commit)

方法一:提交之后再進入vim編輯器寫入這次提交的備注

git commit

方法一:提交的同時寫入備注

git commit -m <"any information you wanna write.">

查看暫存區和本地倉庫中的文件(git ls-files)

git ls-files

查看文件夾下所有文件的狀態(git status)

git status

查看版本庫中的提交記錄(git log)

版本庫即本地倉庫。
方法一:直接查看提交記錄的完整信息

git log

在這里插入圖片描述
箭頭所指的是每次提交更新之后本地倉庫狀態的哈希值,也可以理解該時間點本地倉庫狀態對應的ID,用的時候經常拿一部分來用即可。
方法二:查看部分重要信息

git log --oneline

在這里插入圖片描述
紅框內是哈希值的前N位,一般用這個來對應每一個的提交信息即可。

恢復的文件(git checkout)

  1. 在工作區中的文件被修改之后,卻想要恢復到修改前的狀態,但還未提交到暫存區和本地倉庫。
 git checkout <object_file>

注:git checkout默認只是恢復到上一次的狀態,如果想要恢復到更久以前的狀態,請繼續往下看。再者,這一小節的修改,不僅指修改了文件,還可以指文件被刪除了。

  1. 在工作區中的文件被修改之后,卻想要恢復到修改前的狀態,但已經提交到暫存區和本地倉庫。
  2. 在工作區中的文件被修改之后,卻想要恢復到以前的某個狀態,但已經提交到暫存區和本地倉庫。
git checkout commit <commitid> <object_file>

注:這里的ID即是第N次提交記錄的哈希值。該指令可以把object_file文件恢復到第N次提交時候的狀態。

版本退回(git reset)

版本退回有三種方式,分別是soft, hard, mixed。其中的mixed也是默認(default)的方式。
默認的方式下,本地倉庫的記錄會退回到之前的某個時間點。但工作區和暫存區保持不變。

git reset <commitid>

soft的方式下,本地倉庫和暫存區的狀態會退回到之前的某個時間點。但工作區保持不變。

git reset <commitid> --soft

soft的方式下,本地倉庫、暫存區和工作區的狀態都會退回到之前的某個時間點。

git reset <commitid> --hard

用git reset --hard,打個比方。比如你在早上8:00向本地倉庫提交了一次更新,版本庫記錄這次更新后的狀態ID為123456。接著你繼續工作到中午12:00,但此時你發現你早上的工作方向全錯了,想要恢復早上8:00時的文件狀態,就可以使用git reset 123456 --hard。

查看本地倉庫文件和暫存區文件中的內容(git show)

查看暫存區中文件的內容。

git show :<object_file>

查看本地倉庫里某次狀態下的文件內容。

git show <commitid>:<object_file>

文件差異對比(git diff)

1、對比工作區和暫存區文件的差異

git diff [object_file]

可以看到這里的object_file是被”[ ]“包含起來的,說明這個參數可寫也可不寫,不寫的話表示對比所有文件的差異,寫則表示只對比某個文件的差異。
2、對比工作區和本地倉庫文件內容之間的差異

git diff <commitid> [oject_file]

3、對比本地倉庫中兩個版本的差異

git diff <commitid> <commitid> [object_file] 

4、對比兩個文件之間的差異

git diff <object_file_1> <object_file_2>

忽略文件(.gitignore)

在一個項目中,經常會生成一些中間文件,比如C++在Windows編譯之后有一個.exe文件,而這些文件我們并不希望它被上傳到本地倉庫中。那么,我們就可以利用.gitignore文件去隱藏那些我們不希望上傳的文件。
第一步:創建一個.gitignore文件

vim .gitignore

第二步:在.gitignore文件里寫入我們希望被忽略的文件名。(比如所有的.exe文件)

echo *.exe -> .gitignore

3、SSH簡介(密鑰,GitHub)

在傳統的網絡通信當中,訪問一個網站存在被第三方截取數據的風險,更甚至當你以自己的用戶名和密碼登錄該網站的時候,這些信息也有可能被竊取。于是為了規避這種風險,人們提出了ssh。
SSH(Secure Shell): 一種網絡安全協議,讓信息以加密的形式進行傳輸。具體體現為ssh通信依賴公鑰和私鑰這兩把鑰匙來加密和解析數據。
無論是公鑰還是私鑰都由本地計算機生成,然后本地計算機會把公鑰發給目標服務器。目標服務器所發送的信息都會用公鑰進行加密,當收到信息之后,本地計算機再用私鑰進行數據解析。由于公鑰加密的信息只能用私鑰進行解析,而私鑰一直存在于本地PC之中,所以不可能被第三方通過網絡竊取。通過這種設置,即便第三方通信數據,也因為只有一把鑰匙而無法解析。
以上只是一些關于SSH的粗略理解,事實上公鑰私鑰只用于SSH握手過程的相互確認身份,具體的信息傳遞還是其他一些加密方法。

在本地生成公鑰和私鑰

進入git bash
第一步,切換到根目錄且進入.ssh文件夾。

cd ~
cd .ssh

第二步,生成密鑰。

sshtest-keygen -t rsa -b 4096

第三步,輸入密鑰的名稱(例如test)。
第四步,輸入密碼。
在這里插入圖片描述
通過這個這兩部操作,會生成test和test.pub兩個文件,前者是私鑰文件,后者是公鑰文件。
第五步,創建config文件,指定使用該密鑰文件來認證GitHub。

tial -5 config

最后一步,進入test.pub文件,復制公鑰添加在GitHub中。

在GitHub中添加公鑰

通過上一個步驟,我們獲取了本地計算機生成的公鑰。接下來進入GitHub添加公鑰。
如圖,先進入GitHub頁面,點擊自己的頭像,再點擊Settings…
在這里插入圖片描述
在這里插入圖片描述
通過以上的操作,接下來我們用本地計算機訪問GitHub的時候,GitHub便知道是哪臺計算機訪問它了,以便接下來我們將GitHub的遠程倉庫和本地倉庫連接起來。

4、遠程倉庫(GitHub)相關操作

下載GitHub上的代碼(git clone)

下載GitHub上的代碼可以通過命令行的方式,也可以通過網頁點擊的方式。網頁點擊則相對簡單,如圖,直接點擊Download ZIP即可以下載相應的壓縮包。
在這里插入圖片描述
命令行的方式則有三種,HTTPS, SSH, GitHub CLI。這三種方式只是復制對應的鏈接,然后在git bash輸入命令行即可。

git clone <link>

在我們克隆(clone)別人的倉庫之后,也可以用git log去查看作者的修改記錄。

下載被更新代碼(git pull)

如果我們想獲取代碼作者在GitHub上作的修改,最笨的方法當然是重新下載一遍,但也可以用git pull命令更新所修改的內容。但需要注意的是,使用git pull命令必須先進入相應的文件夾。

git pull

上傳修改的代碼(git push)

我們在本地修改代碼并添加到本地倉庫之后可以用git push命令來將代碼上傳到GitHub上。但這不意味著你可以隨隨便便的將自己的代碼push到別人的倉庫中,一般而言需要得到作者的許可。而對于自己的倉庫,GitHub會通過用戶名或ssh的密鑰來自動匹配你的權限。

git push

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

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

相關文章

如何解決msvcp110.dll丟失問題,分享5個有效的解決方法

最近&#xff0c;我在使用電腦時遇到了一個令人頭疼的問題——msvcp110.dll丟失。這個錯誤通常會導致某些應用程序無法正常運行。為了解決這個問題&#xff0c;我們需要采取一些有效的方法來修復丟失的msvcp110.dll文件。那么&#xff0c;msvcp110.dll到底是什么呢&#xff1f;…

代碼隨想錄 10.14 || 二叉樹 LeetCode 669.修剪二叉搜索樹、108.將有序數組轉換為二叉搜索樹、538.將二叉搜索樹轉為累加樹

669.修剪二叉搜索樹 根據給定的最小邊界 left 和最大邊界 right 修剪二叉搜索樹&#xff0c;保留值在 left ~ right 的節點&#xff0c;刪除不滿足此條件的節點。修剪樹不應該改變保留在樹中的元素的相對結構&#xff0c;即父子關系。 設 cur 為當前訪問的二叉樹節點&#xff0…

LeetCode(32)串聯所有單詞的子串【滑動窗口】【困難】(含圖解)

目錄 1.題目2.答案3.提交結果截圖4.圖解 鏈接&#xff1a; 串聯所有單詞的子串 1.題目 給定一個字符串 s 和一個字符串數組 words。 words 中所有字符串 長度相同。 s 中的 串聯子串 是指一個包含 words 中所有字符串以任意順序排列連接起來的子串。 例如&#xff0c;如果 w…

Flutter的Event Loop

Flutter 的事件循環機制是其框架的核心部分&#xff0c;它負責管理事件的處理和UI的渲染。了解這個機制對于開發高效且響應迅速的Flutter應用非常重要。以下是Flutter事件循環的主要組成部分和工作原理&#xff1a; 1. 主事件循環&#xff08;Main Event Loop&#xff09; 當…

利用ros實現單片機通訊(轉載)

我覺得如果使用這個人的micro_ros通信協議&#xff0c;就不用再去Ubuntu或者Windows上面自己寫驅動程序了&#xff0c; 利用micro_ros實現esp32與ros2的通訊 Tianci ? 天津大學 工學博士 參考&#xff1a;https://github.com/micro-ROS/micro_ros_arduino https://blog.cs…

B站app作品列表sign

之前寫過一篇pc的:B站pc端w_rid逆向 最近pc端老是作妖,更新的太頻繁了, 于是決定干一下app, pc端有個w_rid加密,app端也有個類似的sign 人狠話不多,直接上成果吧: # -*- coding: UTF-8 -*- import hashlib import time import requests import json from urllib.parse…

C語言好好題(一維數組)

兩天沒有更新了&#xff0c;貼紙們&#xff0c;有沒有想我呀。&#x1f604;&#x1f604;&#x1f604; 好了&#xff0c;就寒暄到這里吧&#xff0c;下面請看題&#xff1a; 有序序列判斷 輸入一個整數序列&#xff0c;判斷是否是有序序列&#xff0c;有序&#xff0c;指序列…

騰訊云輕量4核8G12M帶寬服務器租用價格和S5實例報價

騰訊云4核8G服務器優惠價格表&#xff0c;云服務器CVM標準型S5實例4核8G配置價格15個月1437.3元&#xff0c;5年6490.44元&#xff0c;輕量應用服務器4核8G12M帶寬一年446元、529元15個月&#xff0c;阿騰云atengyun.com分享騰訊云4核8G服務器詳細配置、優惠價格及限制條件&…

C++(模板進階)

目錄 前言&#xff1a; 本章學習目標&#xff1a; 1.非類型模版參數 1.1使用方法 1.2注意事項 1.3 實際引用 2.模版特化 2.1概念 2.2函數模板特化 2.3類模板特化 2.3.1全特化 2.3.2偏特化 3.模版分離編譯 ?編輯 3.1失敗原因 ?編輯 3.2解決方案 4 總結 前言&…

【C++】類和對象——構造函數和析構函數

今天要學習兩個特殊的函數&#xff0c;分別是構造函數和析構函數&#xff0c;它們究竟有什么用呢&#xff1f; 比如說&#xff0c;我們先寫一個簡單的日期的類 class Date { public:void Init() {_year 1;_month 1;_day 1;}void Print() {cout << _year << &qu…

Sentinel 分布式系統

Sentinel 是一種分布式系統的流量防衛兵和熔斷器&#xff0c;由阿里巴巴開發并開源。它的主要目標是保護分布式系統中的穩定性和可用性&#xff0c;防止因高并發或異常流量而導致的系統崩潰。下面是 Sentinel 的原理和使用教程的概要&#xff1a; Sentinel 的原理&#xff1a;…

如何去開發一個springboot starter

如何去開發一個springboot starter 我們在平時用 Java 開發的時候&#xff0c;在 pom.xml 文件中引入一個依賴就可以很方便的使用了&#xff0c;但是你們知道這是如何實現的嗎。 現在我們就來解決這一個問題&#xff01; 創建 SpringBoot 項目 首先我們要做的就是把你想要給別…

css3

基礎 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>style</title><!-- link&#xff08;外部樣式&#xff09;和style&#xff08;內部樣式&#xff09;優先級相同&#xff0c;重復寫會覆蓋 --><link re…

面試題-9

1.如何封裝一個組件 1.使用Vue.extend()創建一個組件 2.使用Vue.components()方法注冊組件 3.如果子組件需要數據,可以在props中接收定義 4.子組件修改好數據,要把數據傳遞給父組件&#xff0c;可以用emit()方法 原則: 把功能拆開 盡量讓組件原子化,一個組件做一件事情 …

centos7安裝MySQL—以MySQL5.7.30為例

centos7安裝MySQL—以MySQL5.7.30為例 本文以MySQL5.7.30為例。 官網下載 進入MySQL官網&#xff1a;https://www.mysql.com/ 點擊DOWNLOADS 點擊鏈接&#xff1b; 點擊如上鏈接&#xff1a; 選擇對應版本&#xff1a; 點擊下載。 安裝 將下載后的安裝包上傳到/usr/local下…

CTF靶場搭建及Web賽題制作與終端docker環境部署

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 寫在前面 ╔═══════════════════════════════════════════════════…

使用ChatGPT創建Makefile構建系統:使用Make運行Docker

使用ChatGPT創建Makefile構建系統&#xff1a;使用Make運行Docker 芯語芯愿&#xff08;知乎/紛傳/CSDN/&#xff09;&#xff1b;小石頭的芯語芯愿&#xff08;微信公眾號&#xff09; 開發高效現代的構建系統對于滿足開發周期需求至關重要。原先&#xff0c;嵌入式開發者一…