git常用筆記整理

来源:http://www.cnblogs.com/aroidmine/archive/2017/12/05/7986071.html
-Advertisement-
Play Games

一、安裝Git 1.安裝git,點擊Git Bash進入命令行視窗頁面 2.配置:$ git config --global user.name "Your Name"$ git config --global user.email "[email protected]"註意git config命令 ...



一、安裝Git

1.安裝git,點擊Git Bash進入命令行視窗頁面
2.配置:
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
註意git config命令的--global參數,用了這個參數,表示你這台機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

 

二、創建版本庫
1.創建一個空目錄(mkdir <文件夾名>),可以通過pwd查看當前目錄(註意:目錄名最好不要有中文)
2.通過git init 把目錄變成Git可以管理的倉庫,執行該命令之後可以通過ls -ah查看到該目錄下的隱藏文件.git
3.使用命令git add <文件名> 把該文件提交到stage(暫存區)
3.使用命令git commit <-m "XXX"> 把暫存區里的所有文件提交到Git版本庫

 

三、掌握兩命令
1.git status 查看工作區的狀態
2.git diff 查看文件修改有哪些

 

四、版本回退
1.通過命令git log可以查看所有已經commit的日誌,若信息太多可以在其後面加--pretty=oneline
2.在Git中HEAD表示當前版本
---上一個版本HEAD^
---上上一版本HEAD^^
---前100個版本HEAD~100
3.返回到上一個版本的命令git reset --hard HEAD^
4.回到未來的某版本git reset --hard 3628164 (後面的是一個commit_id)

 

五、工作區和暫存區
1.瞭解工作區和暫存區的模式

 

六、管理修改
1.命令git diff HEAD -- <文件名> 可以查看工作區和版本庫裡面最新版本的區別:

 

七、撤銷修改
1.git checkout -- <文件名>,有以下兩種情況:
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
(前提是該readme.txt文件之前已經被add到stage過,當再在工作區裡面修改後,如果想清楚上次修改,則可用此命令)

一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
2.命令git reset HEAD -- <文件名> 可以把暫存區的修改撤銷掉(unstage),重新放回工作區。

 

八、刪除文件
1.直接刪除工作區的文件,可以用rm <文件名>
2.需要刪除git版本庫中的文件,可用git rm <文件名> ,然後再執行git commit
3.註意:如果只是把工作區的文件刪錯了,而在git版本庫裡面還存在,可以直接用git checkout跟其文件名可找回;

 

九、遠程倉庫
1.由於需要和遠程倉庫是通過SSH來鏈接的,所以需要在本地使用$ ssh-keygen -t rsa -C "[email protected]"來生成一個簽名
如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,
不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
2.第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面
然後,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容



十、添加遠程庫
1.首先,登陸GitHub,然後,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫
2.在Repository name填入learngit,其他保持預設設置,點擊“Create repository”按鈕,就成功地創建了一個新的Git倉庫
3.通過$ git remote add origin git@server-name:path/repo-name.git將本地倉庫與github關聯
(如:$ git remote add origin [email protected]:michaelliao/learngit.git)
4.第一次推送時使用$ git push -u origin master把本地庫的所有內容推送至遠程
(註意:由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,
還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。)

 


十一、從遠程庫克隆
1.首先創建一個遠程庫,然後通過git clone [email protected]:michaelliao/gitskills.git 克隆該項目
2.Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。

 

十二、創建與合併分支
1.在版本回退可以看見有一條預設的時間線,該線是一條主分支即master,而HEAD其實是指向master,master指向提交的,所以HEAD指向的就是當前分反
2.每次在master上提交,該分支就會向前移動一步
3.當我們創建一個新分支(dev)時,此時該分支是指向master相同的提交,當切換為dev分支時,HEAD就指向dev
4.當在dev上提交時,dev就往前移動一步,而master指針不變
5.創建分支的命令$ git branch dev; 切換分支$ git checkout dev,前兩命令可以通過$ git checkout -b dev 完成
6.查看分支$ git branch ,列出所有分支,當前分支前面會有一個*號
7.切換分支後修改內容並提交到該分支後,如果要把該提交合併到主分支,則需要先切換至主分支$ git checkout master
8.合併到master上$ git merge dev
9.刪除原來的分支$ git branch -d dev

 

十三、解決衝突
1.在dev分支上進行開發,開發完成後提交到該分支上,此時切換至master分支,在主分支上也修改一內容提交,然後把dev分支上的提交合併到master上
則提示有衝突,此時我們只需要手動解決衝突然後重新提交即可

 

十四、分支管理策略
1.通常,合併分支時,如果可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。
2.如果要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
3.要禁用此上模式,則需要在合併時加上--no-ff
4.使用$ git merge --no-ff -m "merge with no-ff" dev 合併後,會創建一個新的commit,這裡加上-m參數可以給出描述
5.通過以上方式合併後,我們再通過$ git log --graph --pretty=oneline --abbrev-commit可以查看到分支歷史
總結:合併分支時,加上--no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

 

十五、Bug分支
1.如果目前在dev分支上做開發,現在有一bug需要急速解決併合併到master上,這時可以在master上新建一分支(名為bug-101),由於目前
dev上的內容還不能提交,所以需要通過git stash先儲藏,儲藏後通過git status可以查看到工作區是乾凈的
2.如果是在master上修複就在該分支上創建臨時bug-101分支,修複完成後可以合併到master上並刪除該bug分支
3.再回到dev上繼續開發,可以通過$ git stash list查看工作現場
4.這裡有兩人種方法可以恢復:
一是用git stash apply恢復,但是恢復後,stash內容並不刪除,你需要用git stash drop來刪除;
二是用git stash pop,恢復的同時把stash內容也刪了:
5.當用第二種方式恢復後,再且git stash list時就查不到儲藏的工作現場了
6.你可以多次stash,恢復的時候,先用git stash list查看,然後恢復指定的stash,用命令:$ git stash apply stash@{0}

 

十六、Feature分支
掌握兩點:
1.開發一個新feature,最好新建一個分支。
2.如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。(註意:這裡面用的是大D)

 

十七、多人協作
1.當你從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,並且,遠程倉庫的預設名稱是origin。
2.查看遠程庫的信息用$ git remote,可以查到當前的倉庫名(或者可以用git remote -v查看詳細信息)
3.推送分支$ git push origin <分支名> 比如$ git push origin master或$ git push origin dev
註意如下:
(1)master分支是主分支,因此要時刻與遠程同步;
(2)dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;
(3)bug分支只用於在本地修複bug,就沒必要推到遠程了,除非老闆要看看你每周到底修複了幾個bug;
(4)feature分支是否推到遠程,取決於你是否和你的小伙伴合作在上面開發。
4.當其它人通過git clone命令克隆項目後,預設能看到的是master分支(可通過git branch查看),如果要在dev分支上開發,
就必須創建遠程origin的dev分支到本地,於是他用這個命令創建本地dev分支:$ git checkout -b dev origin/dev,
當在dev上開必後push到遠程。當自己也在該分支上修改後要提交到遠程時,只需要$ git push origin dev就行了。
若在push時出現衝突就先pull下來解決衝突再推送,如果當發現pull失敗是因為沒有指定本地dev分支與遠程origin/dev分支的鏈接的話(通過
提示信息no tracking information表明沒鏈接上),可以通過git branch --set-upstream branch-name origin/branch-name來設置dev和origin/dev的鏈接。
最後鏈接成功後再pull若有衝突再解決再push就Ok

 

小結:

(1)查看遠程庫信息,使用git remote -v;

(2)本地新建的分支如果不推送到遠程,對其他人就是不可見的;

(3)從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;

(4)在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

(5)建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name;

(6)從遠程抓取分支,使用git pull,如果有衝突,要先處理衝突。

 

 

十八、標簽管理
1.發佈一個版本時,我們通常先在版本庫中打一個標簽,這樣,就唯一確定了打標簽時刻的版本。將來無論什麼時候,取某個標簽的版本,
就是把那個打標簽的時刻的歷史版本取出來。所以,標簽也是版本庫的一個快照。
2.Git的標簽雖然是版本庫的快照,但其實它就是指向某個commit的指針(跟分支很像對不對?但是分支可以移動,標簽不能移動),所以,
創建和刪除標簽都是瞬間完成的。

 

十九、創建標簽
1.決定要在哪個分支上打包,比如在master上打標簽,可以直接$ git tag v1.0 表示在master分支的最新的一次提交上打標簽為v1.0
2.命令git tag查看所有標簽
3.預設標簽是打在最新的commit上,如果想要打在之前某次的提交上,可以通過$ git tag v0.9 6224937 即可,後面的數字表示該次提交的密印,
當簽名完成後可以通過git tag查看到剛纔的標簽
註意:當通過git tag時列出所有的標簽不是按時間順序列出,而是按字母排序的
4.通過git show <tagname>查看標簽信息 如:$ git show v0.9
5.創建帶有說明的標簽,$ git tag -a v0.1 -m "version 0.1 released" 3628164 (用-a指定標簽名,-m指定說明文字)

 

二十、操作標簽
1.刪除標簽:$ git tag -d <tagname>
2.推送某個標簽到遠程:git push origin <tagname> 或推送全部尚未推送到遠程的本地標簽$ git push origin --tags
3.如果標簽已經推送到遠程若需要刪除,則需要分兩步,一是先刪除本地的該標簽,二是再刪除遠程的該標簽,即$ git tag -d v0.9和$ git push origin :refs/tags/<tagname>

Git的官方網站:http://git-scm.com

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 方案描述:由於採用單頁面,所以按鈕切換時會刷新頁面 1、安裝 react-intl babel-plugin-react-intl json-loader 2、修改webpack.config.js 與 webpack.production.config.js entry: { en_US: pat ...
  • HTML其實還是蠻容易學習的,無非就是一些標簽、格式的填寫,大學的時候也做過網站設計,所以這裡主要記錄一些常用的HTML標簽、屬性以及書寫方法等。 一、常見HTML格式 主要包含文件type,html標簽、head標簽、body標簽三個主題標簽,其中Head主要包含字元集、描述、關鍵字等信息,而Bo ...
  • href="{$CATEGORYS[45][url]}" 鏈接寫法, {$CATEGORYS[45][catname]} 標題寫法在show頁面中 src="{$thumb}" 圖片展示 {$content};文字內容 ...
  • Ajax大家每天都在用,jquery庫對Ajax的封裝也很完善、很好用,下麵我們看一下他的內部原理,並手動封裝一個自己的Ajax庫。 更多有關ajax封裝及數據處理,請參看上海尚學堂《Ajax中replace+Jq封裝的ajax》、《ajax+json數據處理》 一、原理 原生Ajax的發送需要四步 ...
  • 當元素變為position:absolute時,該元素不占據文檔流,text-align:center失效,則可以通過上述方法使元素中的內容垂直水平居中。 或者: 如果僅僅時元素中的文字居中的話, 給該元素加width:100%;text-align:center;就可以成功實現了。 ...
  • 1. 引言 搞Java的弟兄們肯定都想要達到更高的境界,用更少的代碼解決更多的問題,用更清晰的結構為可能的傳承和維護做準備。想想當初自己摸著石頭過河,也看過不少人介紹的學習路線,十多年走過來多少還是有些收穫。現通過自身經歷總結一篇文章,供弟兄們參考。 2. 用好正在用的框架 在已經加入的團隊中,和大 ...
  • 轉載請註明原創出處,謝謝! 說在前面 之前在 "JVM菜鳥進階高手之路十(基礎知識開場白)" 的時候簡單提到了二進位相關問題,最近在看RocketMQ的源碼的時候,發現涉及二進位的內容蠻多,jdk源碼裡面也是有很多涉及到二進位相關的操作,今天這篇文章僅僅是掃盲篇,後續會介紹靈活運用篇。 說明 任何東 ...
  • 在java中,使用suspend()方法暫停線程,使用resume()方法恢複線程的執行。 1.8.1suspend與resume的使用: 線程代碼: 執行代碼: 執行結果: 從執行的時間來看,新開啟的線程確實發生了暫停(當前線程暫停與啟動的時間與另外開啟的線程是一致的),並且能夠成功的恢復運行狀態 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...