git現(xiàn)
git config -global user.name"用戶名"
git config -global user.email"郵箱”
//初始化倉庫
git init
//將文件添加到倉庫(提交修改和提交新文件都是這個指令)
git add 文件名字
//把文件提交到倉庫
git commit -m “提交的說明”
//倉庫當前的狀態(tài)(可以查看是否被修改)
git status
//查看修改的地方
git diff 文件名
// 顯示從最近到最遠的提交日志
git log 或者 git log --pretty=oneline
//回退到上一個版本
git reset --hard HEAD^
//回退到上上一個版本
git reset --hard HEAD^^
//回退到指定版本(回退100個版本)
git reset --hard HEAD~100
// 返回指定版本(commit id:1094a....)
git reset --hard commit id
//記錄每一次命令
git reflog
穿梭前厌漂,用git log可以查看提交歷史侦讨,以便確定要回退到哪個版本酪耕。要重返未來喧笔,用git reflog查看命令歷史制跟,以便確定要回到未來的哪個版本
工作區(qū)和暫存區(qū)
工作區(qū):當前目錄
暫存區(qū):目錄里面的.git文件是Git的版本庫,存了很多東西昔搂,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)拍嵌,還有Git為我們自動創(chuàng)建的第一個分支master坯沪,以及指向master的一個指針叫HEAD媒怯。
我們把文件往Git版本庫里添加的時候梧奢,是分兩步執(zhí)行的:
第一步是用git add把文件添加進去孤里,實際上就是把文件修改添加到暫存區(qū)念赶;
第二步是用git commit提交更改伴箩,實際上就是把暫存區(qū)的所有內容提交到當前分支启涯。
因為我們創(chuàng)建Git版本庫時困肩,Git自動為我們創(chuàng)建了唯一一個master分支整陌,所以拗窃,現(xiàn)在,git commit就是往master分支上提交更改泌辫。
簡單的來說可以理解為随夸,需要提交的文件修改通通放到暫存區(qū),然后震放,一次性提交暫存區(qū)的所有修改宾毒。
//丟棄工作區(qū)的修改
git checkout -- 文件名
**把文件在工作區(qū)的修改全部撤銷,這里有兩種情況
**
一種是文件自修改后還沒有被放到暫存區(qū)殿遂,現(xiàn)在诈铛,撤銷修改就回到和版本庫一模一樣的狀態(tài)乙各;
一種是文件已經(jīng)添加到暫存區(qū)后,又作了修改幢竹,現(xiàn)在耳峦,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之焕毫,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)蹲坷。
//暫存區(qū)的修改撤銷掉,重新放回工作區(qū)
git reset HEAD 文件名
小結
場景1:當你改亂了工作區(qū)某個文件的內容,想直接丟棄工作區(qū)的修改時邑飒,用命令git checkout -- file冠句。
場景2:當你不但改亂了工作區(qū)某個文件的內容,還添加到了暫存區(qū)時幸乒,想丟棄修改,分兩步唇牧,第一步用命令git reset HEAD <file>罕扎,就回到了場景1,第二步按場景1操作丐重。
場景3:已經(jīng)提交了不合適的修改到版本庫時腔召,想要撤銷本次提交,參考版本回退一節(jié)扮惦,不過前提是沒有推送到遠程庫臀蛛。
//刪除文件
rm 文件名
//版本庫中刪除該文件
git rm 文件名
git commit -m "說明文字"
添加遠程庫
git remote add origin git@github.com:路徑
git push -u origin master //(第一次推送master分支時,加上了-u參數(shù)崖蜜,把本地的master分支和遠程的master分支關聯(lián)起來)
//簡化命令
git push origin master
//查看遠程庫信息
git remote -v
//刪除遠程庫(解除和遠程庫的綁定)
git remote rm origin
從遠程庫克隆
方式是先創(chuàng)建遠程庫浊仆,然后,從遠程庫克隆
git clone git@github.com:git庫地址
創(chuàng)建與合并分支
//創(chuàng)建分支
git checkout -b dev// git branch dev和git checkout dev兩步
// 或者
git switch -c dev
// 切換分支
git checkout 分支
//或者
git switch 分支
//查看當前分支
git branch
//其他分支合并到當前分支上(例:將dev分支合并到當前的master分支上)
git merge dev
//刪除分支(例:刪除dev分支)
git branch -d dev
--------------------------------------------------------------------Bug分支------------------------------------------------------------------------------------
bug情景:
當你接到一個修復一個代號101的bug的任務時豫领,很自然地抡柿,你想創(chuàng)建一個分支issue-101來修復它,
但是等恐,當前正在dev上進行的工作還沒有提交洲劣。并不是你不想提交,而是工作只進行到一半课蔬,
還沒法提交囱稽。但是,必須在兩個小時內修復該bug二跋,怎么辦战惊?
步驟如下:
1.//當前工作現(xiàn)場“儲藏”起來
git stash
2.//確定要在哪個分支上修復bug,假定需要在master分支上修復同欠,就從master創(chuàng)建臨時分支
git checkout master
git checkout -b issue-101
3.修復bug样傍,然后提交
4.修復完成后横缔,切換到master分支,并完成合并衫哥,最后刪除issue-101分支
git switch master
git merge --no-ff -m "merged bug fix 101" issue-101
5.接著回到dev分支干活
git switch dev
git status
git stash list
6.Git把stash內容存在某個地方了茎刚,但是需要恢復一下,有兩個辦法:
一是用git stash apply恢復撤逢,但是恢復后膛锭,stash內容并不刪除,你需要用git stash drop來刪除蚊荣;
另一種方式是用git stash pop初狰,恢復的同時把stash內容也刪了
git stash apply
git stash drop
//或者
git stash pop
6.1同樣的bug,要在dev上修復互例,我們只需要把4c805e2 fix bug 101這個提交所做的修改“復制”到dev分支奢入。
注意:我們只想復制4c805e2 fix bug 101這個提交所做的修改,并不是把整個master分支merge過來媳叨。
git branch //當前應該在dev分支上
git cherry-pick 4c805e2 //4c805e2 是指你提交時候的那個commit id
// 拉取代碼
git pull
//查看遠程庫信息
git remote -v
多人開發(fā)修改了一個文件解決方法
情景:
clone默認情況下只能看到本地master分支腥光,要在dev分支上開發(fā),必須創(chuàng)建遠程origin的dev分支到本地糊秆,
git checkout -b dev origin/dev
就可以在dev上修改了
如果多人修改了同一個文件,推送會出現(xiàn)沖突武福,解決如下(出現(xiàn)原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接):
git branch --set-upstream-to=origin/dev dev
git pull
但是合并的時候有沖突,需要手動解決沖突即可痘番。
因此捉片,多人協(xié)作的工作模式通常是這樣:
1.首先,可以試圖用git push origin <branch-name>推送自己的修改
2.如果推送失敗汞舱,則因為遠程分支比你的本地更新伍纫,需要先用git pull試圖合并
3.如果合并有沖突,則解決沖突兵拢,并在本地提交
4.沒有沖突或者解決掉沖突后翻斟,再用git push origin <branch-name>推送就能成功
如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關系沒有創(chuàng)建说铃,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>访惜。
這就是多人協(xié)作的工作模式,一旦熟悉了腻扇,就非常簡單债热。
標簽
//切換到需要打標簽的分支上
git branch
//創(chuàng)建標簽
git tag v1.0
//查看所有標簽
git tag
默認標簽是打在最新提交的commit上的
如果給之前提交的打標簽的話,找到歷史提交的commit id打上就可以了
git log --pretty=oneline --abbrev-commit //所有提交的版本展示
// 給之前的某一個打標簽
git tag 標簽名 commit id
// 刪除標簽(本地)
git tag -d 標簽名
//刪除遠程的標簽
1.git tag -d 標簽名
2.git push origin :refs/tags/標簽名
//推送標簽到遠程
git push origin 標簽名
//推送所有沒有推送到遠端的標簽
git push origin --tags
//將master分支上代碼同步更新到dev分支上
//1.首先切換到master分支上
git checkout master
//2.拉取代碼
git pull
//3.切換到dev分支上
git checkout dev
//4.把master分支的代碼merge到自己的分支
git merge master
//5.git push推上去ok可以了幼苛。
git push origin dev