git命令列使用

來源:互聯網
上載者:User

git命令列使用

  git命令使用方法git安裝包

  http://c35.yunpan.360.cn/my/?sid=#%2F%E5%AE%89%E8%A3%85%E5%8C%85%2FGit%E5%AE%89%E8%A3%85%2F

  git安裝時秘鑰產生步驟

  1. git config --global user.name xxx

  2. git config --global user.email xxx@xxx

  3. ssh-keygen -C xxx@xxx -t rsa//第3步分為下面3個小步驟

  (1)公開金鑰儲存地址 按斷行符號選擇預設

  (2)私密金鑰密碼-為了後續使用方便 設定為空白

  (3)產生公開金鑰和私密金鑰identification has been saved in /c/Users/xxx/.ssh/id_rsa.public key has been saved in /c/Users/xxx/.ssh/id_rsa.pub.// git公開金鑰------/c/Users/xxx/.ssh/id_rsa.pub.檔案中的內容

  ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/pYFUKMZUPNJtjOdSQl74GH4JxAQ8F+EqaMoR9Yw+5VNW81eWrrbbSsjpEDPaZIbb0Sc89oJ4Uzi2lpHjhTujMmdzf2TrfOaGRa2+M5Ey4Z1MXuT4RVawrZ/PtK7tTI+eMKc/NZqhcp9e+NYIVzbwUMqvAnx+OTgDF3RYmYWDcbvTX0AybOBd/NwV1BtR5PkPRHlGQN0Oi5wHmvXmP9WIQ9dAoi+w63mhL+c8a8Qu+PBZBiknzJRB1p9dtIOEPdq5ltGAqluEZ0FTEzet1qH0pAUaOxxEsZAhGpa9453rQJ433Emg7hy30KomOQvFp64T6QlTGFKIg9EMm9t8Ny2r xxx@xxxgit推薦使用SSH協議的原因使用SSH協議可以避免每次push輸入密碼。前提是在賬戶裡配置好SSH秘鑰。 git@github.com開頭的就是SSH協議。 使用Https協議則會導致每次都會輸入使用者名稱和密碼。

  git bash命令視窗和字型的大小設定

  滑鼠點擊git bash介面的標題列,滑鼠右鍵選擇

  // 視窗尺寸設定

  options --> windows -->修改行數(高度)+列數(寬度)

  // 視窗字型設定

  options --> text -->設定字型大小

  // 別的設定可參考此文

  http://my.oschina.net/lieefu/blog/476252

  // 解決gitk在Windows下的中文亂碼問題

  http://howiefh.github.io/2014/10/11/git-encoding/

  // 順帶瞭解一下win7的命令視窗設定

  http://article.pchome.net/content-1245289-all.html

  建立本地庫

  // 從零開始建立1.git init 建立一個空的Git庫。在目前的目錄中產生一個.git 的子目錄。以後,所有的檔案變化資訊都會儲存到這個目錄下

  2.git init --bare 建立備份倉庫(在伺服器或者工程目錄以外路徑都可以建立的備份倉庫)// 複製已有倉庫建立

  git clone /path/to/repository // 本地庫

  git clone git/ssh/http[s]/ftp[s]/file/rsync:username@ip/path/to/repository // 遠端伺服器

  git clone的本質就是把“Git目錄”裡面的內容拷貝過來,一般的“Git目錄”裡有成千上萬的各種對象(提交對象,樹對象,二進位對象, tag對象......),如果逐一複製的話,其效率就可想而知。

  如果通過git、ssh協議傳輸,伺服器端會在傳輸前把需要傳輸的各種對象先打好包再進行傳輸;而http(s)協議則會反覆請求要傳輸的不同對象。如果倉庫裡面的提交不多的話,前者和後者的效率相差不多;但是若倉庫裡有很多提交的話,git、ssh協議進行傳輸則會更有效率。不過現在Git對http(s)協議傳輸Git倉庫做了一定的最佳化,http(s)傳輸現在也能達到ssh協議的效率

  .git目錄的組成COMMIT_EDITMSG         # 儲存著上一次提交時的注釋資訊

  config # 項目的配置資訊

  description # 項目的描述資訊

  HEAD # 項目當前在哪個分支的資訊index # 索引檔案,git add之後要添加的內容暫存在這裡

  hooks/ # 預設的“hooks” 指令檔

  info/ # 裡面有一個exclude檔案,指定本項目要忽略的檔案 #,看一下這裡

  logs/ # 各個refs的曆史資訊

  objects/ # 這個目錄非常重要,裡面儲存都是Git的資料對象

  # 包括:提交(commits), 樹對象(trees),二進位對象 #(blobs),標籤對象(tags)。 # 在objects目錄下,SHA串的前兩個字元作為目錄名,後面的38個字元作為檔案名稱

  refs/ # 標識著你的每個分支指向哪個提交(commit)。

  // 查看提交檔案的內容,2d832d是SHA(安全hash演算法)簽名值

  $ git cat-file -p 2d832d

  // 詳細請參考 本地倉庫的建立和構成

  http://www.infoq.com/cn/news/2011/02/git-adventures-local-repository

  工作流程

  本地和遠程工作流程

  你的本地代碼 由 git 維護的三棵“樹”組成。第一個是你的 工作目錄,它持有實際檔案;第二個是 緩衝區(Index/stage),它像個快取區域,臨時儲存你的改動;最後是本地倉庫( HEAD),指向你最近一次提交後的結果。

  git clone 用於建立本地倉庫 // origin 是git clone預設使用的遠程主機名稱

  通過git clone擷取遠端git庫後,.git/config中的開發人員資訊不會被一起clone過來。仍然需要為本地庫的.git/config檔案添加開發人員資訊。此外,開發人員還需要自己添加 . gitignore檔案。 通過git clone擷取的遠端git庫,只包含了遠端git庫的當前工作分支。如果想擷取其它分支資訊,需要使用 “git branch –r” 來查看, 如果需要將遠端其它分支代碼也擷取過來,可以使用命令 “ git checkout -b 本地分支名 遠程分支名”,其中,遠程分支名為 “git branch –r” 所列出的分支名, 一般是諸如“origin/分支名”的樣子。如果本地分支名已經存在, 則不需要“-b”參數。

  git fetch 從遠程擷取最新版本到本地,不會自動merge,比git pull更安全些。 如果先使用 git fetch ,再使用git checkout nov/eclair_rocket,則是先從伺服器上擷取最新的更新資訊,然後從伺服器上下載最新的代碼。git pull 從伺服器的倉庫中擷取代碼,和本地代碼合并。等同於: Git fetch + Git merge這條命令將從遠端git庫的遠端分支名擷取到本地git庫的一個本地分支中。其中,如果不寫本地分支名,則預設pull到本地當前分支。 如果你的本地分支已經有內容,則git pull會合并這些檔案,如果有衝突會警示。 git pull和git push是針對所有分支進行的操作。也就是說即使我切換到一個次分支alpha, 如果這個分支和遠端的分支已關聯了的話,那麼執行git pull會把master分支和alpha分支都更新到遠端。

  git命令列使用

  添加與提交

  你可以計劃改動(把它們添加到緩衝區),使用如下命令:

  git add dir1 # 添加dir1這個目錄,目錄下的所有檔案都被加入

  git add f1 f2 # 添加f1,f2檔案

  git add . #將本地所有的(新增和修改,沒有刪除)檔案添加到暫存區

  git add -u #將本地的(修改和刪除,沒有新增)檔案添加到暫存區

  git add -A/* #添加目前的目錄下的所有檔案

  #git add -A = git add . + git add -u

  git add . #添加目前的目錄下的所有檔案和子目錄

  git rm --cache a.c #刪除已提交到本地倉庫的檔案

  這是 git 基本工作流程的第一步;使用如下命令以實際提交改動:

  git commit -m "代碼提交資訊"

  git commit -a -m "代碼提交資訊" # git commit -a是把unstaged的檔案變成staged(這裡不包括建立(untracked)的檔案),然後commit

  git commit --amend # 修改提交的commit(沒有push)

  git commit --amend -m "comment" # 修改commit註解

  現在,你的改動已經提交到了 HEAD,但是還沒到你的遠端倉庫。

  推送改動

  你的改動現在已經在本地倉庫的 HEAD 中了。執行如下命令以將這些改動提交到遠端倉庫:

  git push origin mastergit push不會自動合并檔案。因此,如果git push時,發生了衝突,就會被後push的檔案內容強行覆蓋,而且沒有什麼提示。 這在合作開發時是很危險的事情。

  可以把master換成你想要推送的任何分支。

  如果你還沒有複製現有倉庫,並欲將你的倉庫串連到某個遠程伺服器,你可以使用如下命令添加:

  git remote add origin

  如此你就能夠將你的改動推送到所添加的伺服器上去了

  分支

  分支是用來將特性開發絕緣開來的。在你建立倉庫的時候,master 是“預設的”。在其他分支上進行開發,完成後再將它們合并到主分支上。

  git checkout -b feature_x建立一個叫做“feature_x”的分支,並切換過去:

  切換回主分支:

  git checkout master

  再把建立的分支刪掉:

  git branch -d feature_x

  除非你將分支推送到遠端倉庫,不然該分支就是 不為他人所見的:

  git push origin

  重新命名本地分支

  git branch -m branch-old-name branch-new-name

  更新

  要更新你的本地倉庫至最新改動,執行:

  git pull origin git fetch origin

  標籤

  在軟體發布時建立標籤,是被推薦的。這是箇舊有概念,在 SVN 中也有。可以執行如下命令以建立一個叫做 1.0.0 的標籤:

  git tag 1.0.0 1b2e1d63ff

  1b2e1d63ff 是你想要標記的提交 ID 的前 10 位字元。使用如下命令擷取提交 ID:

  git log

  你也可以用該提交 ID 的少一些的前幾位,只要它是唯一的。

  // 給tag添加註釋

  git tag -v1.4 -m 'my version 1.4'

  // 顯示tag版本記錄git show tag-name// 一次性推送所有tag到遠程伺服器git push origin --tags

  // 取出打過tag的某個版本 git checkout -b branch_name tag_name

  // 刪除tag時需注意,如果向遠程伺服器提交了tag,則刪除tag時,不僅要刪除本地的tag,還要刪除遠端tag

  // 刪除本地的tag命令是

  git tag -d tag-name

  // 刪除遠程tag的命令是

  git push origin --delete tag-name

  替換本地改動

  假如你做錯事(自然,這是不可能的),你可以使用如下命令替換掉本地改動:

  git checkout --

  此命令會使用 HEAD 中的最新內容替換掉你的工作目錄中的檔案。已添加到緩衝區的改動,以及新檔案,都不受影響。

  假如你想要丟棄你所有的本地改動與提交,可以到伺服器上擷取最新的版本並將你本地主分支指向到它:

  git fetch origin master

  git reset origin/master --hard

  git 忽略檔案的設定方式

  可參考以下兩個網址

  git ignore檔案的三種設定方式[http://www.jianshu.com/p/267cd94f1d49 ]

  git ignore檔案設定的具體文法[http://www.cnblogs.com/pylemon/archive/2012/07/16/2593112.html#3226325]

  重點說一下踩過的坑:

  .gitignore 檔案可以忽略自己。忽略的檔案,只針對未追蹤檔案有效,對已加入版本庫的檔案無效。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.