日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

git命令使用方法

發布時間:2025/7/25 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git命令使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from: 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+PBZBiknzJRB1p9dtIOEPdq5ltGAqluEZ0FTEzet1qH0pAUaOxxEsZAhGpa9453rQJ433 Emg7hy30KomOQvFp64T6QlTGFKIg9EMm9t8Ny2r 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 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)的文件),然后commitgit commit --amend # 修改提交的commit(沒有push) git commit --amend -m "comment" # 修改commit注解

?

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

推送改動

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

git push origin master git push不會自動合并文件。因此,如果git push時,發生了沖突,就會被后push的文件內容強行覆蓋,而且沒有什么提示。 這在合作開發時是很危險的事情。?


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

如果你還沒有克隆現有倉庫,并欲將你的倉庫連接到某個遠程服務器,你可以使用如下命令添加:

git remote add origin <server>

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

?

分支

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

?

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

切換回主分支:

git checkout master

再把新建的分支刪掉:

git branch -d feature_x

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

git push origin <branch>

?重命名本地分支

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

?

更新

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

git pull origin <remote-branch> <local-branch> git fetch origin <remote-branch>

標簽

在軟件發布時創建標簽,是被推薦的。這是個舊有概念,在 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 -- <filename>

此命令會使用 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 文件可以忽略自己。忽略的文件,只針對未跟蹤文件有效,對已加入版本庫的文件無效。

git check-ignore 可用來檢查所寫的忽略文件語法是否正確

?

忽略文件的原則是:

1.忽略操作系統自動生成的文件,比如縮略圖等;

2.忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;

3.忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

不需要從頭寫.gitignore文件,GitHub已經為我們準備了各種配置文件,只需要組合一下就可以使用了,比如分別輸入Tags和SublimeText,在下面的網址中查詢忽略規則?https://www.gitignore.io/?

?

git 分支合并

假設此時,你突然接到一個電話說有個很嚴重的問題需要緊急修補,那么可以按照下面的方式處理:

  • 返回到原先已經發布到生產服務器上的分支。
  • 為這次緊急修補建立一個新分支,并在其中修復問題。
  • 通過測試后,回到生產服務器所在的分支,將修補分支合并進來,然后再推送到生產服務器上。
  • 切換到之前實現新需求的分支,繼續工作。
  • $ git checkout -b iss53 // 在master分支上新建一個iss53分支

    相當于執行下面這兩條命令:

    $ git branch iss53 $ git checkout iss53

    ?

    // 將hotfix分支合并到master $ git checkout master$ git merge hotfix

    ?

    合并時發生沖突的提示信息

    $ git merge iss53 Auto-merging index.htmlCONFLICT (content): Merge conflict in index.htmlAutomatic merge failed; fix conflicts and then commit the result.

    合并狀態的查看

    $ git status On branch master You have unmerged paths.(fix conflicts and run "git commit")Unmerged paths:(use "git add <file>..." to mark resolution)both modified: index.htmlno changes added to commit (use "git add" and/or "git commit -a")

    ?

    任何包含未解決沖突的文件都會以未合并(unmerged)的狀態列出。Git 會在有沖突的文件里加入標準的沖突解決標記,可以通過它們來手工定位并解決這些沖突。可以看到此文件包含類似下面這樣的部分:

    <<<<<<< HEAD <div id="footer">contact : email.support@github.com</div> ======= <div id="footer">please contact us at support@github.com </div> >>>>>>> iss53

    可以看到?=======?隔開的上半部分,是?HEAD(即?master?分支,在運行?merge?命令時所切換到的分支)中的內容,下半部分是在?iss53?分支中的內容。解決沖突的辦法無非是二者選其一或者由你親自整合到一起。比如你可以通過把這段內容替換為下面這樣來解決:

    這個解決方案各采納了兩個分支中的一部分內容,而且我還刪除了?<<<<<<<,=======?和?>>>>>>>?這些行。在解決了所有文件里的所有沖突后,運行?git add?將把它們標記為已解決狀態(譯注:實際上就是來一次快照保存到暫存區域。)。因為一旦暫存,就表示沖突已經解決。

    ?

    git branch -d studyGit // 對studyGit分支進行合并后,才能刪除得了studyGit分支 git branch -D studyGit // 強制刪除studyGit分支

    再運行一次?git status?來確認所有沖突都已解決:

    $ git status On branch master Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified: index.html

    如果覺得滿意了,并且確認所有沖突都已解決,也就是進入了暫存區,就可以用?git commit?來完成這次合并提交。提交的記錄差不多是這樣:

    ?

    Git - 分支的新建與合并可參考下文

    https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E6%96%B0%E5%BB%BA%E4%B8%8E%E5%90%88%E5%B9%B6

    ?

    git merge和git rebase 合并分支的差異

    http://gitbook.liuhui998.com/4_2.html

    git rebase生成的歷史記錄線比較好看

    ?

    開發過程中,若你在開發的branch功能比較多, commit的量也比較多時,建議使用rebase將你現在的branch整理過再合并回主干,這樣會產生較漂亮的線

    ?

    git版本庫回滾

    1、git checkout the_branch2、git pull3、git branch the_branch_backup //備份一下這個分支當前的情況4、git reset --hard the_commit_id //把the_branch本地回滾到the_commit_id5、git push origin :the_branch //刪除遠程 the_branch6、git push origin the_branch //用回滾后的本地分支重新建立遠程分支7、git push origin :the_branch_backup //如果前面都成功了,刪除這個備份分支 ? --soft 回退commit--mixed 回退commit和stage--hard 回退commit stage workspace//本地倉庫回退到某個版本 git reset version_hash --hard// 推送至遠程倉庫,使遠程倉庫回退到某個版本 git push 遠程主機名 遠程目錄 -f ?

    Git的版本回退速度非常快,因為Git在內部有個指向當前版本的HEAD指針,當你回退版本的時候,Git僅僅是把HEAD從指向append GPL

    版本號沒必要寫全,前幾位就可以了,Git會自動去找。當然也不能只寫前一兩位,因為Git可能會找到多個版本號,就無法確定是哪一個了。

    git reset --hard 3628164

    ?

    git revert和git reset的區別

    http://blog.csdn.net/caz28/article/details/43602879

    git revert 和 git reset 只有在回退最近的一次提交時,才是等效的

    (1)git revert會使提交記錄增多,git reset會使提交記錄減少

    (2)git revert只是撤銷指定版本的提交,git reset是回卷,會撤銷指定版本之后的所有提交

    git reset HEAD~3

    git revert HEAD~3

    (3) git reset只能針對本地操作,不能對遠程服務器執行同樣的操作。

    git revert和get reset的后悔藥

    revert后如果不想撤銷了,看一下log,reset回去就可以了。
    reset后后悔了怎么辦,沒有log了!沒關系,下面命令可以查到更多commit ID:
    git reflog

    再輸入:
    git reset <commit ID>

    這個commit ID是上次reset前的ID,就可以回退會reset以前狀態了。

    在Git中,總是有后悔藥可以吃的

    git reflog ?記錄你操作的每一條指令

    • HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。

    • 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。

    • 要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

    // 可參考這篇文章 版本回退

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013744142037508cf42e51debf49668810645e02887691000

    // git revert

    http://samael65535.github.io/git/2013/01/18/git/

    ?

    有用的貼士

    內建的圖形化 git:
    gitk
    彩色的 git 輸出:
    git config color.ui true
    顯示歷史記錄時,只顯示一行注釋信息:
    git config format.pretty oneline

    如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數:

    git log --pretty=oneline

    你看到的一大串類似3628164...882e1e0的是commit id(版本號),和SVN不一樣,Git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進制表示,而且你看到的commit id和我的肯定不一樣,以你自己的為準。為什么commit id需要用這么一大串數字表示呢?因為Git是分布式的版本控制系統,后面我們還要研究多人在同一個版本庫里工作,如果大家都用1,2,3……作為版本號,那肯定就沖突了。

    在Git中,用HEAD表示當前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

    ?

    想進一步了解git指令的話,可閱讀下面幾篇文章

    git 入門級指令

    https://github.com/guodongxiaren/LinuxTool/blob/master/git.md

    git常用命令解說

    http://zensheno.blog.51cto.com/2712776/490748

    git常用命令總結

    http://blog.csdn.net/a396901990/article/details/43428905

    git簡明教程

    http://shahdza.blog.51cto.com/2410787/1616345

    比較系統的git教程

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000

    總結

    以上是生活随笔為你收集整理的git命令使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。