站長資訊網
        最全最豐富的資訊網站

        Git命令配置學習筆記

        Git 筆記

        • Git是分布式版本控制系統
        • 集中式VS分布式:
          1. 集中式版本控制系統,版本庫集中存放在中央服務器,必須要聯網才能工作,沒有歷史版本庫。
          2. 分布式版本控制系統,版本控制系統沒有“中央服務器”,每個人電腦上都是一個完整的版本庫。
          3. 分布式系統優勢:安全性更高,不需要聯網,如果中央服務器故障,任何其他一個開發人員的本地都有最新的帶有歷史記錄的版本庫。
        • 主要區別在于歷史版本庫的存放,集中式系統歷史版本只存在于中央服務器,而分布式控制系統中每個本地庫都有歷史記錄存放。

        Git命令

        Git配置

        $ git config --global user.name "Your Name"  $ git config --global user.email "email@example.com" 

        注意git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

        創建版本庫

        在當前目錄創建git倉庫

        $ git init 

        把文件添加到倉庫

        $ git add <file> $ git commit

        git add可以反復多次使用,添加多個文件,git commit可以一次提交很多文件,在git commit命令后添加(-m ‘····’)方便從歷史記錄里找到修改記錄。

        掌握工作區的狀態

        $ git status 

        查看文件修改內容

        $ git diff

        版本回退

        $ git reset -- hard HEAD^

        HEAD指向的版本是當前版本,回到上一版本使用以上命令,如果回退上兩個版本使用HEAD^^,如果回退版本數較大(如往上50個版本),使用HEAD~50。

        回退指定版本

        $ git reset --hard commit_id

        commit_id是指定版本號,是由SHA1計算出來的數字

        查看提交歷史

        $ git log 

        查看命令歷史

        $ git reflog

        工作區、暫存區和版本庫

        git與其他版本控制系統的不同之處就是有暫存區的概念,工作區就是電腦中能看到的目錄,工作區有一個隱藏目錄[.git],這是git的版本庫。版本庫里有許多東西,最重要的是稱為stage的暫存區。

        Git命令配置學習筆記

        將文件往版本庫里添加時是分兩步執行的:

        1. 第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區。
        2. 第二步是用git commit提交修改,實際上就是把暫存區的所有內容提交到當前分支。

        Git是如何跟蹤修改的,每次修改,如果不用git add到暫存區,那就不會加入到commit中。

        撤銷修改

        丟棄工作區的修改

        $ git checkout -- <file>

        該命令是將文件在工作去的修改全部撤銷,這里有兩種情況:

        • 一種是file自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
        • 一種是file已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。

        總之,就是讓這個文件回到最近一次git commit或git add時的狀態。

        丟棄暫存區的修改

        改亂了工作區某個文件的內容同時還添加到了暫存區,想丟棄修改時,先使用命令git reset HEAD <file>,之后按撤銷工作區修改進行操作。

        進行了commit命令提交的修改

        已經提交了不合適的修改到版本庫時,想要撤銷修改,使用版本回退命令,前提是沒有推送到遠程庫.

        刪除文件

        $ git rm <file>

        當你要刪除文件text.txt的時候,可以采用命令:rm test.txt
        這個時候有兩種情況:

        第一種情況:的確要把test.txt刪掉,那么可以執行
        $ git rm test.txt
        $ git commit -m "remove test.txt"
        此時文件被刪除,且刪除記錄上傳本地庫。

        第二種情況:誤刪文件,想恢復,這時候還沒有commit -m "remove test.txt",執行git checkout test.txt將文件恢復。

        如果執行完git commit -m "remove test.txt"后就不能用checkout恢復了,得用git reset --hard HEAD^,再從版本庫寫回到工作區。
        git rm用于刪除一個文件。如果一個文件已經被提交到版本庫,那么你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容。

        遠程倉庫

        創建SSH Key

        $ ssh-keygen -t rsa -C "youremail@example.com"

        關聯遠程倉庫

        $ git remote add origin https://github.com/username/repositoryname.git

        推送到遠程倉庫

        $ git push -u origin master

        -u 表示第一次推送master分支的所有內容,此后,每次本地提交后,只要有必要,就可以使用命令$ git push origin master推送最新修改。

        從遠程克隆

        $ git clone https://github.com/usern/repositoryname.git

        注意:當你不能使用 git@github.com 命令來進行推送和克隆,是因為沒有安裝密鑰。

        • 添加私秘鑰到$ ssh-add ~/.ssh/id_rsa
        • 如果添加失敗可以先執行命令$ eval ssh-agent是~鍵上的那個符號,然后再次添加私秘鑰。
        • $ ssh -T git@github.com判斷是否綁定成功。如果返回successfully表示成功。

        分支管理

        查看分支

        $ git branch

        創建分支

        $ git branch <name>

        切換分支

        $ git checkout <name>

        創建+切換分支

        $ git checkout -b <name>

        合并某分支到當前name分支

        $ git merge <name>

        刪除分支

        $ git branch -d <name>

        強行刪除分支

        $ git branch -D <name>

        如果要丟棄一個沒有被合并過的分支,可以通過以上命令來實現。

        查看分支合并圖

        $ git log --graph

        當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。
        git log --graph命令可以看到分支合并圖。

        普通模式合并分支

        $ git merge --no-ff -m "description" <branchname>

        通常進行分支合并時,git會使用Fast forward模式,刪除分支后,分支信息會丟失,可以使用--on-ff參數,禁用Fast forward,需要時加上一個-m參數把commit描述寫進去。這樣進行合并后的歷史有分支,能看出來曾經做過合并。

        保存工作現場

        $ git stash  

        查看工作現場

        $ git stash list

        恢復工作現場

        $ git stash pop

        在新建分支中修改bug時的推薦操作

        首先理清兩個概念:
        未被追蹤的文件:指的是新建的文件或文件夾且還沒加入到暫存區(新建的還沒有被git add)
        未加入到暫存區的文件:指的是已經被追蹤過,但是沒有加入到暫存區(已經執行過git add/commit的但是這次修改后還沒有git add)
        舉例:
        readme.md 已經被git add/git commit過,但是呢,我這次只是修改了,而且沒有修改完,不能commit;
        test 新建的文件夾,沒有被git add/git commit;
        有個bug需要處理,這時候我需要切換分支,去處理bug
        正確的步驟:
        git add test(讓git去追蹤這個新文件)
        git stash保留現場
        如果不執行這兩個命令,那么在修改BUG完成之后git status,就會發現readme.md沒有添加到暫存區,同時又多了個test文件,
        但是自己的readme.md沒有完成,萬萬不可以提交,這樣導致bug的修改代碼也提交不了。
        所以需要git stash,這樣在提交修改bug代碼的時候 ,就不會看見readme.md 和 test??梢园残奶峤恍薷腷ug的代碼。

        查看遠程庫信息

        $ git remote -v;

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

        從本地推送分支

        $ git push origin branch-name

        如果推送失敗,先用git pull抓取遠程的新提交;

        在本地創建和遠程分支對應的分支

        $ git checkout -b branch-name origin/branch-name

        本地和遠程分支的名稱最好一致;

        建立本地分支和遠程分支的關聯

        $ git branch --set-upstream branch-name origin/branch-name

        從遠程抓取分支

        $ git pull

        如果有沖突,要先處理沖突。

        標簽

        git標簽是版本庫的快照,實際就是某個commit的指針,如果要找到某次版本的commit號,數字復雜不好找,使用tag取一個易于記住和理解的名字就方便許多,它跟某個commit綁在一起。(類似于域名和IP地址的關系?)

        新建標簽

        $ git tag<tagname> 

        默認為HEAD,也可以指定一個commit id。

        查看標簽信息

        $ git show <tagname>

        創建帶有說明的標簽

        $git tag -a <tagname> -m <description> <branchname> or commit_id

        用-a指定標簽名,-m指定說明文字

        查看所有標簽

        $ git tag

        推送某個標簽到遠程

        $ git push origin <tagname>

        一次性推送全部尚未推送到遠程的本地標簽

        $ git push origin --tags

        刪除一個本地標簽

        $ git tag -d <tagname>

        刪除一個遠程標簽

        $ git push origin :refs/tags/<tagname>
        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久Av无码精品人妻系列| 影音先锋国产精品国语对白| 国产精品网站在线观看免费传媒| 国产精品成人99久久久久91gav| 日韩人妻无码精品久久免费一| 国产欧美日本亚洲精品一5| 国产精品欧美日韩| 久久精品亚洲日本波多野结衣| 亚洲AV无码成人精品区大在线| 国产精品爽爽ⅴa在线观看| 午夜精品成年片色多多| 国产AV无码专区亚洲精品| 亚洲AV成人精品一区二区三区| 精品国产欧美一区二区三区成人 | 精品国产免费一区二区三区香蕉 | 国产精品亚洲午夜一区二区三区 | 亚洲AⅤ永久无码精品AA | 无码人妻丰满熟妇精品区| 久久国产精品一区| 国产成人精品免费大全| 欧美精品在线一区二区三区| 嫖妓丰满肥熟妇在线精品| 国产成人精品综合网站| 亚洲精品乱码久久久久久按摩| 久久精品无码一区二区三区日韩| 国产精品青青在线观看爽香蕉| 亚洲午夜精品一区二区| 亚洲精品国产成人专区| 久久久久久久99精品免费观看| 精品少妇一区二区三区视频| 久久99精品国产99久久| 精品久久久久久国产91| 国产在线精品一区二区不卡| 国产亚洲福利精品一区| 久久精品国产91久久综合麻豆自制| 55夜色66夜色国产精品视频| 国产99视频精品免费专区| 91精品国产乱码久久久久久| 97久久超碰国产精品旧版| 99久久99久久久精品齐齐 | 999成人精品视频在线|