通用功能——git 攻略

摘要

本文主要介紹git常用命令的使用方法,同時介紹一些常見問題的處理方法,持續更新中…

git命令通用選項

大多數git命令都適用的選項列表如下:

-v, --verbose         show hash and subject, give twice for upstream branch
-q, --quiet           suppress informational messages
-t, --track           set up tracking mode (see git-pull(1))
--set-upstream        change upstream info
-u, --set-upstream-to <upstream> change the upstream info
--unset-upstream      Unset the upstream info
--color[=<when>]      use colored output
-r, --remotes         act on remote-tracking branches
--contains <commit>   print only branches that contain the commit
--abbrev[=<n>]        use <n> digits to display SHA-1s

常用命令

git help

使用方式如下,其中command_name 具體使用的時候替換成要查詢的命令名。

git help <command_name>

git help 命令的輸出結構(以輸入git help help為例):

NAME(命令名稱)git-help - 顯示git有關的幫助信息SYNOPSIS(梗概)(相同的option選項會放在同一個[]中,許多命令提供了簡寫形式)git help [-a|--all] [-g|--guide] [-i|--info|-m|--man|-w|--web] [COMMAND|GUIDE]DESCRIPTION(描述)help命令使用的一些描述(包括如何使用、使用注意事項以及如何能最高效的得到你想要的結果)OPTION(選項)對具體的option選項(即SYNOPSIS中中括號展示出來的選項)具體的解釋CONFIGURATION VARIABLES關于該命令的可選配置(即該命令在.gitconfig文件中可以進行的一些配置操作)

首次使用,可以輸入git help,該命令會展示一些使用git的總體幫助信息,展示如下:

git命令使用的不同場景:創建一個git工作區 (萬里長征的第一步)clone      克隆分支init       創建一個新的git倉庫或者重新初始化一個已經存在的git倉庫(放心,在一個已經存在的git倉庫中執行git init命令是安全的,執行該命令的主要原因是為了快速挑選出新近添加的模版或者使用驚醒倉庫移動)針對當前分支的操作 (詳情請看:git help everyday)add        將文件添加到git的索引中(方便提交)mv         將文件(目錄等)進行移動或重命名reset      將當前分支的HEAD(最新提交)Reset到指定的commitrm         將文件從工作樹和工作索引中移除檢查歷史及狀態的相關命令(詳情請看: git help revisions)bisect     Find by binary search the change that introduced a buggrep       Print lines matching a patternlog        Show commit logsshow       Show various types of objectsstatus     Show the working tree statusgrow, mark and tweak your common historybranch     查詢、創建或刪除分支checkout   切換分支或者恢復當前工作區的文件commit     將更改記錄到倉庫,及本地提交diff       比較不同提交(分支和工作目錄)之間的差異等merge      將開發記錄合并rebase     將本地提交放在提交記錄的頂部(及記錄棧棧頂)具體可查看git rebase 中的示例tag        創建、查詢、刪除或核對一個用GPG協議簽名的Tagcollaborate (see also: git help workflows)fetch      拉取更新,不合并pull       拉取更新并合并push       推送更新到相關分支git help -a     列出所有git命令(方便查看有哪些git命令)
git help -g  列出所有概念性的指導(很有用)

git add

git add支持以通配符形式的添加文件

git add .        添加當前目錄所有改變(修改、刪除、新增)的文件信息到索引庫(常用)
git add -u .     添加當前目錄所有修改、刪除的文件信息到索引庫,不處理untracked文件
git add -A .    添加當前目錄所有修改、刪除的文件信息導索引庫,并將untracked文件添加到索引庫
git add -i .    交互式添加當目錄所有修改、刪除、新增的文件信息到索引庫

git add -i . 輸入之后,會進入一個子命令系統,會列出當前工作目錄所有tracked和untracked的文件信息,同時會在下方列出以下八個子命令:

  1: [s]tatus     2: [u]pdate     3: [r]evert     4: [a]dd untracked5: [p]atch      6: [d]iff       7: [q]uit       8: [h]elp

這八個子命令都是見名知意的,使用方式都是輸入相應子命令后,列出帶序號的文件列表,選擇要操作的文件序號(可多選),執行命令,顯示命令結果,之后按回車鍵,返回子命令系統目錄。

git push

首次使用git push命令(即直接輸入git push),git 會提示設置set upstream,其實就是讓你設置本地分支同遠程分支見的對應關系,建立跟蹤關系的方法:

  1. 建立分支時采用 —track,如:

    git branch --track local_branch origin/remote_branch_name
    執行之后,本地分支local_branch 和 遠程分支remote_branch_name間就建立了跟蹤關系
    
  2. 使用—set-upstream(相當于修改項目根目錄.get文件夾下的config文件),如:

    git branch --set-upstream test_branch origin/test_branch
    
  3. push操作時使用—set-upstream,如:

    git push origin --set-upstream test_bransh:origin/test_branch
    

push命令具體分析:

git push -u origin local_branch:remote_branch 推送成功后,local_branch和remote_branch間就存在對應關系了;
git push --prune(中文意思裁剪)推送之后,如果本地分支不存在了,同名的遠程分支也將被刪除
git push -n 模擬推送,除了真正的將更新推送過去這件事不干外,其他push會發生的操作都進行了
git push --delete remote_branch_name刪除遠程分支remote_branch_name(效果同git push origin :remote_branch_name)
git push --all 推送所有分支
git push --quiet推送之后不現實輸出結果,除非發生了錯誤
git push --progress推送之后顯示推送進度

push命令的一些便捷操作:

git push將當前的分支推送到關聯的遠程分支,沒有的話git會予以提示;
git push origin同上,沒有的話會報錯
git push origin :將當前的分支推送到匹配的遠程分支
git push origin master將master分支推送到遠程的master分支,如果遠程沒有,則會創建相同名稱的遠程分支
git push origin HEAD將當前分支推送到相同名車個的遠程分支

git merge

git merge 操作需要操作著熟悉vim編輯器,由于自己使用的較少,顧不做描述,建議采用GUI環境來進行Merge操作(通常就是解決沖突)

待我熟悉了vim,我會不全的。

git checkout

  1. git checkout origin/remote_branch_name,運行該命令會處于HEAD Detached狀態,原因是HEAD不能指向遠程分支,它只能指向本地的某個commit或者本地分支。當"git checkout 遠程分支",而本地又沒有這個分支,HEAD就會直接指向遠程分支指向的commit了,HEAD指向commit就會進入detached HEAD state。這個以后只要運行以下命令即可:

    git checkout -b 分支名// 運行完之后,在利用git push將新建的本地分支和上面的分支
    // 關聯起來即可
    

git pull

首次使用git pull命里該,效果同首次使用git push命令相同。在默認的git pull選項中,該命令相當于執行以下命令組:

git fetch remote
git merge FETCH_HEAD

使用git pull —rebase時,相當于執行以下命令組:

git fetch remote
git rebase

git pull具體分析

pull命令本身只有三個option選項(-q, -v, —[no-]recurese-submodules),但由于pull命令是fetch和merge兩個命令的組合,使用pull命令時要注意fetch命令和merge命令的一些注意事項。

git rebase

俗稱變基操作,舉個栗子來說明(來源于git文檔)

Assume the following history exists and the current branch is "topic":A---B---C topic/D---E---F---G masterFrom this point, the result of either of the following commands:git rebase mastergit rebase master topicwould be:A'--B'--C' topic/D---E---F---G master

我的理解就是,將并行兩個commit記錄(采用新的commit來)串行處理。

rebase過程中如果存在沖突,先解決沖突,然后采用git add .將更改的文件添加到索引庫,在繼續rebase操作(無需提交),具體命令如下:

git rebase master
git rebase master topic(或者采用git pull --rebase)if(conflicts occures) {First, resolve the conflicts;(實際上就是一些merge操作)Then, git add .(添加merge修改的文件)Finally, git rebase --continue
}
變基操作完成。

rebase過程中如果想放棄變基操作,可采用如下命令:

git rebase --abort該命令會放棄變基,讓操縱的回到之前的狀態

還有其他選項,會在使用過程中陸續添加

git log

顯示提交記錄,其選項較多,大多是美化log輸出、設置log輸出格式、設置log輸出范圍等

git log --follow <filePath>顯示特定文件的歷史更改記錄
git log -g顯示所有的記錄(包括丟失的),用來做數據恢復很方便,等同于命令git reflog
git log <revirsion range>顯示已定范圍的log
git log --merges顯示所有的merge記錄

git branch

展示、創建或刪除分支

git branch列出所有本地分支
git branch -a 列出所有遠程分支和本地分支
git branch -r列出所有遠程分支
git branch -d local_branch_name刪除本地分支(對local_branch_name分支的合并狀態有要求,必須完全合并)
git branch -f branch_name創建分支branch_name,如果branch_name存在,則重置(不使用-f的區別就是如果branch_name存在則重用branch_name分支
git branch -D(shortcut for --delete --force)刪除本地分支(對local_branch_name分支的合并狀態無要求,相當于強刪)
git branch -m old_branch_name new_branch_name重命名old_branch_name為new_branch_name(對old_branch_name分支的merge狀態有要求)
git branch -M old_branch_name new_branch_name重命名old_branch_name為new_branch_name(對old_branch_name強行重命名)
git branch --color=[always, never, auto] color_branch_name高亮顯示color_branch_name這個分支

git config

用來配置倉庫或全局的配置選項

// git 全局配置命令

git remote

該命令用來管理已經跟蹤的庫,常見用法:

 git remote [-v | --verbose]git remote add [-t <branch>] [-m <master>] [-f] [--[no-]tags] [--mirror=<fetch|push>] <name> <url>git remote rename <old> <new>git remote remove <name>git remote set-head <name> (-a | --auto | -d | --delete | <branch>)git remote set-branches [--add] <name> <branch>...git remote get-url [--push] [--all] <name>git remote set-url [--push] <name> <newurl> [<oldurl>]git remote set-url --add [--push] <name> <newurl>git remote set-url --delete [--push] <name> <url>git remote [-v | --verbose] show [-n] <name>...git remote prune [-n | --dry-run] <name>...git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
  1. 如下將本地庫添加到遠程倉庫
git remote add origin https://github.com/Rainmonth/JavaLearn.git
git push -u origin maste

git 大文件提交

參考文章

// GitHub 對提交的文件大小有限制,要小于 100m,即使使用了上面的 git global 

常見問題

中文文件名在git中顯示亂碼

原因是因為git中文默認以\xxx八進制形式展現,會對對0x80以上的字符進行quote,只要將core.quotepath設置為false即可解決問題

git config --global core.quotepath false

恢復已刪除的的分支、會見或丟失的commit

前提是存在恢復的可能性,以下情況不能恢復:

丟失的分支或commit信息沒有被git gc清除,一般情況下,gc對那些無用的object會保留很長時間后才清除的。

恢復方法,具體步驟如下:

  1. 執行git reflog(或git log -g)命令,查看所有歷史操作信息,得到要恢復的commit的commit id
  2. 執行git branch recover_branch_name commit id命令,創建一個恢復分支;
  3. 將恢復分支合并到當前工作分支,打完收工。

忽略已經跟蹤的文件

假設已經跟蹤的文件為git.txt,執行以下代碼即可

git rm --cached
git update-index --assume-unchanged git.txt
git update-index --no-assume-unchanged git.txt

常用工作流程

重要概念

常用git IDE推薦

SourceTree

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

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

相關文章

Vim 一下日志文件,Java 進程沒了?

一次端口告警&#xff0c;發現 java 進程被異常殺掉&#xff0c;而根因竟然是因為在問題機器上 vim 查看了 nginx 日志。下面我將從時間維度詳細回顧這次排查&#xff0c;希望讀者在遇到相似問題時有些許啟發。 時間線 15:19 收到端口異常 odin 告警。 狀態:P1故障 名稱:應用端…

黑馬點評筆記 redis實現優惠卷秒殺

文章目錄 難題全局唯一IDRedis實現全局唯一Id 超賣問題問題解決方案樂觀鎖問題 一人一單 難題 要解決優惠卷秒殺的問題我們要考慮到三個個問題&#xff0c;全局唯一ID&#xff0c;超賣問題&#xff0c;一人一單。 全局唯一ID 用戶搶購時&#xff0c;就會生成訂單并保存到同一…

【git】pip install git+https://github.com/xxx/xxx替換成本地下載編譯安裝解決網絡超時問題

目錄 &#x1f311;&#x1f311; 背景 &#x1f312; &#x1f312;作用 &#x1f314;&#x1f314; 問題 &#x1f314;&#x1f314;解決方案 &#x1f319;方法一 &#x1f319;方法二 &#x1f31d;&#x1f31d;我的解決方案 整理不易&#xff0c;歡迎一鍵三連…

7-12 統計投票情況(集合)

7-12 統計投票情況&#xff08;集合&#xff09; 分數 10 作者 python課程組 單位 福州大學至誠學院 利用集合分析活動投票情況。 第一小隊有五名隊員&#xff0c;序號是1,2,3,4,5&#xff1b;第二小隊也有五名隊員&#xff0c;序號6,7,8,9,10。 輸入一個由得票隊員編號組成的…

分布式篇---第三篇

系列文章目錄 文章目錄 系列文章目錄前言一、什么是補償事務?二、消息隊列是怎么實現的?三、那你說說Sagas事務模型前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站,這篇文章男女通用,看懂了就去分享給你的碼吧。…

qgis添加postgis數據

左側瀏覽器-PostGIS-右鍵-新建連接 展開-雙擊即可呈現 可以點擊編輯按鈕對矢量數據編輯后是直接入庫的&#xff0c;因此謹慎使用。

【DQN】基于pytorch的強化學習算法Demo

目錄 簡介代碼 簡介 DQN&#xff08;Deep Q-Network&#xff09;是一種基于深度神經網絡的強化學習算法&#xff0c;于2013年由DeepMind提出。它的目標是解決具有離散動作空間的強化學習問題&#xff0c;并在多個任務中取得了令人矚目的表現。 DQN的核心思想是使用深度神經網…

企業數字化轉型的作用是什么?_光點科技

在當今快速變化的商業環境中&#xff0c;數字化轉型已成為企業發展的重要策略。企業數字化轉型指的是利用數字技術改造傳統業務模式和管理方式&#xff0c;以提升效率、增強競爭力和創造新的增長機會。 提升運營效率&#xff1a;數字化轉型通過引入自動化工具和智能系統&#x…

指數退避重試

指數退避重試&#xff08;Exponential Backoff and Retry&#xff09;是一種網絡通信中常用的錯誤處理和重試策略。它通常用于處理臨時性的故障&#xff0c;例如網絡延遲、服務器過載或臨時性的錯誤&#xff0c;以提高系統的可靠性和穩定性。 基本思想是&#xff0c;當發生一個…

NX二次開發UF_CSYS_ask_wcs 函數介紹

文章作者&#xff1a;里海 來源網站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_ask_wcs Defined in: uf_csys.h int UF_CSYS_ask_wcs(tag_t * wcs_id ) overview 概述 Gets the object identifier of the coordinate system to which the work coordin…

JMeter壓測常見面試問題

1、JMeter可以模擬哪些類型的負載&#xff1f; JMeter可以模擬各種類型的負載&#xff0c;包括但不限于Web應用程序、API、數據庫、FTP、SMTP、JMS、SOAP / RESTful Web服務等。這使得JMeter成為一個功能強大且靈活的壓力測試工具。 2、如何配置JMeter來進行分布式壓力測試&a…

在華為昇騰開發板安裝gdal-python

作者:朱金燦 來源:clever101的專欄 為什么大多數人學不會人工智能編程?>>> 在華為昇騰開發板安裝gdal-python分為兩步:編譯gdal庫和下載gdal對應的python包。 1.編譯gdal庫 首先下載gdal庫,。在linux(arm架構)上編譯的gdal庫及其第三方庫源碼,內含一個編譯…

智慧法院 | RPA+AI打造智慧執行助手,解決“案多人少”現實難題

為深化政法智能化建設&#xff0c;加強“智慧治理”“智慧法院”“智慧檢務”“智慧警務”“智慧司法”等信息平臺建設&#xff0c;深入實施大數據戰略&#xff0c;實現科技創新成果同政法工作深度融合。法制日報社于今年3月繼續舉辦了2023政法智能化建設創新案例及論文征集宣傳…

Unity UGUI的HorizontalLayoutGroup(水平布局)組件

Horizontal Layout Group | Unity UI | 1.0.0 1. 什么是HorizontalLayoutGroup組件&#xff1f; HorizontalLayoutGroup是Unity UGUI中的一種布局組件&#xff0c;用于在水平方向上對子物體進行排列和布局。它可以根據一定的規則自動調整子物體的位置和大小&#xff0c;使它…

Shell腳本:Linux Shell腳本學習指南(第二部分Shell編程)二

第二部分&#xff1a;Shell編程&#xff08;二&#xff09; 十一、Shell數組&#xff1a;Shell數組定義以及獲取數組元素 和其他編程語言一樣&#xff0c;Shell 也支持數組。數組&#xff08;Array&#xff09;是若干數據的集合&#xff0c;其中的每一份數據都稱為元素&#…

Navicat 技術指引 | GaussDB服務器對象的創建/設計(編輯)

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持對GaussDB 主備版的管理和開發功能。它不僅具備輕松、便捷的可視化數據查看和編輯功能&#xff0c;還提供強大的高階功能&#xff08;如模型、結構同步、協同合作、數據遷移等&#xff09;&#xff0c;這…

【華為OD題庫-034】字符串化繁為簡-java

題目 給定一個輸入字符串&#xff0c;字符串只可能由英文字母(a ~ z、A ~ Z)和左右小括號()組成。當字符里存在小括號時&#xff0c;小括號是成對的&#xff0c;可以有一個或多個小括號對&#xff0c;小括號對不會嵌套&#xff0c;小括號對內可以包含1個或多個英文字母也可以不…

Jenkins Ansible 參數構建

首先在Jenkins中創建自由項目 在web端配置完成后在另一臺機子上下載nginx 在gitlab端創建項目并創建文件配置代碼 在有Jenkins的機器上下載Ansible [rootslave1 ~]# yum -y install epel-release [rootslave1 ~]# yum -y install ansible再進入下載nginx機器中克隆gitlab項目…

Android 框架層AIDL 添加接口

文章目錄 AIDL的原理構建AIDL的流程往凍結的AIDL中加接口 AIDL的原理 可以利用ALDL定義客戶端與服務均認可的編程接口&#xff0c;以便二者使用進程間通信 (IPC) 進行相互通信。在 Android 中&#xff0c;一個進程通常無法訪問另一個進程的內存。因此&#xff0c;為進行通信&a…

卷積神經網絡(AlexNet)鳥類識別

文章目錄 一、前言二、前期工作1. 設置GPU&#xff08;如果使用的是CPU可以忽略這步&#xff09;2. 導入數據3. 查看數據 二、數據預處理1. 加載數據2. 可視化數據3. 再次檢查數據4. 配置數據集 三、AlexNet (8層&#xff09;介紹四、構建AlexNet (8層&#xff09;網絡模型五、…