12個git實戰建議和技巧

摘要:git無疑是現在最熱門的版本控制工具,而且正在進一步侵占SVN以及CVS的市場。本文作者從國外技術問答社區Stack Overflow整理的12個很實用的git使用技巧和建議,希望對你有幫助。

1.使用“git diff”來折疊多行


用git diff經常會出現很多內容,導致很多內容被遮住了,讓人很是苦惱,幸運的是這里有個解決方案。

如果你使用less作為默認的pager,只需要輸入-s,就可以保證不會被diff刷屏了。

或者,你也可以使用git config設置pager來達到同樣的效果:

為當前項目設置pager:

  1. $?git?config?core.pager?'less?-r'??

再將pager設置的作用域設置為整個項目:

  1. $?git?config?--global?core.pager?'less?-r'??

2.設置全局代理


在某些網絡環境下,你可能需要為git配置代理,這很簡單,只需要一行命令就可以了:

  1. git?config?--global?https.proxy?https://user:password@address:port?

3.clone某個特定分支


在某些大型項目中,或者只是圖方便,有時候你可能只希望clone某個分支,你可以這樣做:

  1. mkdir?$BRANCH?
  2. cd?$BRANCH?
  3. git?init?
  4. git?remote?add?-t?$BRANCH?-f?origin?$REMOTE_REPO?
  5. git?checkout?$BRANCH?

4.比較某個文件和遠程分支上的區別


很簡單:

  1. git?diff?localbranch?remotebranch?filepath?

5.列出版本庫中所有已刪除的文件


也許你是想將其恢復,因此需要仔細確認某些merge操作,無論如何,列出版本庫中所有已刪除的文件會非常有幫助。你只需要這樣做:

  1. git?log?--diff-filter=D?--summary?

如果你想將其恢復,參照這里。

如果你不想知道是哪次commit中刪除的,只需要添加一個grep delete。

  1. git?log?--diff-filter=D?--summary?|?grep?delete?

6.在版本庫所有版本中搜尋一條字符串


往往你想要查找某段代碼、某個函數、一個常量、一個文件,但是卻找不到了。它被刪除了,什么時候刪除的?這個小技巧能搜索整個版本庫中git diff信息,可能會花些時間,但是非常有用:

  1. git?rev-list?--all?|?(?
  2. ????while?read?revision;?do?
  3. ????????git?grep?-F?'Your?search?string'?$revision?
  4. ????done?
  5. )?

7.應用另外一個(不相關的)本地版本庫中的patch


從另一個版本庫中cherry-pick一條提交記錄,首先需要將那個版本庫作為一個遠程版本庫添加進來,并fetch其變化,然后cherry-pick其提交記錄。

如果你追求速度,也可以使用這個未經優化的命令:

  1. git?--git-dir=../some_other_repo/.git?format-patch?-k?-1?--stdout?<commit?SHA>|?git?am?-3?-k?

8.從新的主干中分出一個新分支


有時候你會在better_brach上工作一段時間,并準備將其設為新的master,你會怎么做?

這里是Stack Overflow上提供的常規解決方案:

1.切換到better_brach分支:

  1. git?checkout?better_branch?

2.保留better_branch分支全部內容,但是記錄合并:

  1. git?merge?--strategy=ours?master?

3.切回mater

  1. git?checkout?master?

4.快速合并

  1. git?merge?better_branch?

5.如果你想讓合并步驟變得更清晰,可以添加commit信息。只需要修改下第二步:

  1. git?merge?--strategy=ours?--no-commit?master?
  2. git?commit?#?Here?add?your?custom?message?to?the?commit?template?

9.向分支提交一個初始的空commit,保證完全復位


這樣會重寫歷史記錄,所以只能在未和任何人分享前做,否則將可能把同事者的文件破壞。

1.創建一個新的空分支,例如:newroot

  1. git?checkout?--orphan?newroot?
  2. git?rm?--cached?-r?.?
  3. git?clean?-f?-d?

2.創建空的commit

  1. git?commit?--allow-empty?-m?'[empty]?initial?commit'?

3.重新發送分支的全部內容

  1. git?rebase?--onto?newroot?--root?master?

4.刪除臨時分支newroot

  1. git?branch?-d?newroot?

現在master就已經包含了一個空的root commit了。

10.清空一個分支來做些不同的事


有時候你會想要從某個分支重新開始,或者打算保留一些邏輯上和主干相關但是跟蹤另一個跨職能方面的代碼,就像GitHub項目的gh-pages。

但如果你只想重新開始某個分支,清空所有歷史記錄呢?

1.檢出(checkout)一個分支:

  1. git?checkout?-b?branch_to_zero?

2.跟上條一樣,先建立增加一個初始的空commit,之后就可以通過重新設置來清空一個分支。

3.使用hard重置分支到剛剛創建的初始commit:

  1. git?reset?--hard?initial_commit?

11.如何修改一個特定的commit?


當你想在推送前重做你最后的commit時,可以使用修改命令(git commit --amend)。如果你想修改的不是最后一個commit呢?

這種情況下,你可以使用git rebase,例如,你想要修改bbc643cd commit,運行下面的命令:

  1. $git?rebase?bbc643cd^?--interactive??

在默認的編輯器中選擇并修改你期望修改的,然后保存修改并輸入:

  1. $?git?add?<filepattern>??

現在你就可以使用

  1. $git?commit?--amend?

來修改commit,之后使用

  1. $?git?rebase?--continue??

返回之前最新的commit。

12.如何隱藏多個已修改文件中一個?


git stash --keep-index命令可以用來隱藏上次commit中沒有add的東西,之后add想要提交的文件并運行相應命令就可以了。

按照下面的提示,你可以把一條老的commit提交到多個變更集中:

互動地rebase最后一條好的commit:

  1. git?rebase?-i?last_good_commit?

將某些變化標記為edit:

  1. git?reset?HEAD^?
  2. git?add?file1?file2?file3?

添加相應的文件:

  1. git?add?file1?file2?file3?

因此之前沒有添加的文件:

  1. git?stash?--keep-index?

別忘了收尾:

  1. git?commit?
  2. git?stash?pop?

有必要的話,重復第二步之后的步驟:

  1. git?rebase?--continue?

原文鏈接:durdn.com

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

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

相關文章

python讀寫json和txt

讀寫json #數據保存如json文件 import json jsObj json.dumps(code_sec) fileObject open(jsonFile.json, w) fileObject.write(jsObj) fileObject.close() #讀取json文件 # 將類文件對象中的JSON字符串直接轉換成 Python 字典 with open(jsonFile.json, r, encoding…

Java 12 將于3月19日發布,8 個最終 JEP 一覽

開發四年只會寫業務代碼&#xff0c;分布式高并發都不會還做程序員&#xff1f; JDK 12 已于2018年12月進入 Rampdown Phase One 階段&#xff0c;這意味著該版本所有新的功能特性被凍結&#xff0c;不會再加入更多的 JEP 。該階段將持續一個月&#xff0c;主要修復 P1-P3 級…

股票期貨數據的resample處理

? import pandas as pd stock_day pd.read_csv("stock_day.csv") stock_day stock_day.sort_index() # 對每日交易數據進行重采樣 &#xff08;頻率轉換&#xff09; stock_day.index# 1、必須將時間索引類型轉換成Pandas默認的類型 stock_day.index pd.to_datet…

ArcEngine調用FeatureToLine工具傳參問題

FeatureToLine工具的in_features參數不能為內存圖層&#xff0c;否則會報內存錯誤&#xff0c;正確的寫法如下&#xff1a; FeatureToLine ftrToLine new FeatureToLine(); ftrToLine.in_features cpj.TempWs.PathName "\OriginDataset\" currentFc.Key; ftrToLi…

程序員如何做出“不難看”的設計

摘要&#xff1a;程序員在寫代碼的時候往往只注重功能的實現和性能的提升&#xff0c;忽視了外觀和易用性&#xff0c;其實很多時候只要注意一些基本的規則&#xff0c;就可以大幅度提高產品的觀感。 經常看到程序員展示自己做的東西&#xff0c;有一些是創業項目&#xff0c;有…

微服務實戰(二):使用API Gateway

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 當你決定將應用作為一組微服務時&#xff0c;需要決定應用客戶端如何與微服務交互。在單體式程序中&#xff0c;通常只有一組冗余的或者…

sql數據庫挖坑

sql數據庫存入數據時&#xff0c;因為列 名不允許有括號&#xff0c;無法識別&#xff0c;需要對括號進行剔除 df df.rename(columnslambda x: x.replace("(","").replace(),))

力扣——頂端迭代器

給定一個迭代器類的接口&#xff0c;接口包含兩個方法&#xff1a; next() 和 hasNext()。設計并實現一個支持 peek() 操作的頂端迭代器 -- 其本質就是把原本應由 next() 方法返回的元素 peek() 出來。 示例: 假設迭代器被初始化為列表 [1,2,3]。調用 next() 返回 1&#xff0c…

五步讓你成為專家級程序員

摘要&#xff1a;Mark Lassoff是一位高級技術培訓師&#xff0c;從事培訓工作已有10余年。他培訓的客戶包括美國國防部、Lockheed Martin等。在多年的培訓生涯中&#xff0c;他總結了一些如何快速學習一門語言的技巧&#xff0c;這些技巧非常簡單&#xff0c;但是卻讓人受益匪淺…

Ionic混合移動app框架學習

第一章 緒論創建移動app有三種安卓原生App&#xff0c;使用java語言&#xff0c;目前推薦kotlin語言&#xff0c;開發工具Android studioIOS原生App&#xff0c;使用Objective-C或者Swift語言&#xff0c;開發工具Xcode混合移動App&#xff0c;使用web通用語言&#xff08;HTML…

IPC 中 LPC、RPC 的區別和聯系

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 進程間通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;&#xff0c;指至少兩個進程或線程間傳送數據或信號的…

Laravel 使用 Aliyun OSS 云存儲

對象存儲 ( Object Storage Service, 簡稱 OSS ) OSS 相信大家都聽過, 它是阿里云對外提供的海量, 安全和高可靠的云存儲服務. 大家可以把自己網站的資源存上面加快自己網站速度, aliyun 官網也有文檔不過對于新手來說有點難, 那么這里我給大家推薦一個組件和組件的使用. johnl…

python多級索引修改

創建多級索引 cols pd.MultiIndex.from_tuples([("a","b"), ("a","c")]) pd.DataFrame([[1,2], [3,4]], columnscols) abc012134 df.columns df.columns.droplevel() df bc012134

在線學習新編程 技巧全攻略

摘要&#xff1a;有句俗語叫&#xff1a;“技多不壓身”&#xff0c;如果你有時間和興趣&#xff0c;不妨多了解和掌握編程技能&#xff0c;或許隨時可能有用。本文為你收集了一些編程技巧&#xff0c;讓你輕松學編程。 有句俗語叫&#xff1a;“技多不壓身”&#xff0c;如果你…

第 3 章 鏡像 - 018 - 鏡像命名的最佳實踐

為鏡像命名 創建鏡像時 docker build 命令時已經為鏡像取了個名字&#xff0c;例如&#xff1a; docker build -t ubuntu-with-vi 這里的 ubuntu-with-vi 就是鏡像的名字。通過 dock images 可以查看鏡像的信息。 1 rootubuntu:~# docker images ubuntu-with-vi 2 REPOSITORY …

Jmeter邏輯控制器-ForEach Controller

ForEach Controller 介紹 ForEach Contoller 即循環控制器&#xff0c;顧名思義是定義一個規則。主要有以下一個參數&#xff1a;名稱&#xff1a;隨便填寫注釋&#xff1a;隨便填寫輸入變量前綴&#xff1a;可以在“用戶自定義變量”中定義一組變量。循環控制器可以從中獲取到…

微服務實戰(三):深入微服務架構的進程間通信

見&#xff1a;http://www.dockone.io/article/549簡介 在單體式應用中&#xff0c;各個模塊之間的調用是通過編程語言級別的方法或者函數來實現的。但是一個基于微服務的分布式應用是運行在多臺機器上的。一般來說&#xff0c;每個服務實例都是一個進程。因此&#xff0c;如下…

python輸出與刪除某行或某列

python輸出字符&#xff0c;主要為結合變量形成新的變量名 year 2016 event Referendum fResults of the {year} {event}Results of the 2016 Referendum yes_votes 42_572_654 no_votes 43_132_495 percentage yes_votes / (yes_votes no_votes) {:-9} YES votes {:2…

為什么應該用模塊取代C/C++中的頭文件?

摘要&#xff1a;本文整理自Apple C工程師Doug Gregor的演講Slide&#xff0c;他表示希望使用模塊&#xff08;Module&#xff09;這一概念替代C/C中的頭文件&#xff0c;現已被C標準化委員會任命為Module研究組的主席&#xff0c;研究該提議的可能性。考慮到Apple的開源項目LL…

北向資金進行股票、期貨指數、基金策略

#%%導入包 import tushare as ts import datetime import pandas as pd import numpy as np import akshare as ak import warnings warnings.filterwarnings("ignore")#獲取北向資金數據 df_data2 ak.stock_em_hsgt_north_acc_flow_in(indicator"北上") d…