git命令總結(jié)

git學(xué)習(xí)網(wǎng)站:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5

git學(xué)習(xí)思維導(dǎo)圖:http://www.lxweimin.com/p/e2f553942317

深入淺出:http://chengshiwen.com/article/head-first-git/

廖雪峰的git學(xué)習(xí)網(wǎng)站:

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

git幾個(gè)概念

版本庫(kù):文件倉(cāng)庫(kù),倉(cāng)庫(kù)里的修改刪除,git都能跟蹤歷史,可以在將來(lái)某個(gè)時(shí)刻還原。

工作目錄:本地項(xiàng)目目錄

暫存區(qū)域:工作目錄和git目錄之間的中轉(zhuǎn)區(qū)(stage或index)

本地倉(cāng)庫(kù)git目錄:本地代碼提交的目錄

git安裝方法

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137396287703354d8c6c01c904c7d9ff056ae23da865a000

創(chuàng)建版本庫(kù)

方法一:在github中新建項(xiàng)目,git clone下來(lái)

方法二:在本地已有項(xiàng)目里創(chuàng)建版本庫(kù)并關(guān)聯(lián)遠(yuǎn)程倉(cāng)庫(kù)

新建遠(yuǎn)程倉(cāng)庫(kù):

方法一:

curl?-u?'username'?https://api.github.com/user/repos-d?'{"name":"RepoName"}'

方法二:在github網(wǎng)頁(yè)版上 右上角“+”號(hào),點(diǎn)擊“New repository”

創(chuàng)建好后會(huì)得到一個(gè)遠(yuǎn)程倉(cāng)庫(kù)鏈接:https://github.com/sunshineMaria/testgit.git

關(guān)聯(lián)本地代碼與遠(yuǎn)程倉(cāng)庫(kù):

cd testgit (進(jìn)入項(xiàng)目目錄)

git init ? ? ? ?(把這個(gè)目錄變成Git可以管理的倉(cāng)庫(kù))

echo?"#?testgit"?>>README.md(新建一個(gè)README.md文件,內(nèi)容為# testgit)

git add . ? ? ?(添加所有工作區(qū)文件到暫存區(qū))

git commit -m 'README.md for this project' ? (提交示例文件到本地倉(cāng)庫(kù))

git remote add origin?https://github.com/sunshineMaria/testgit.git(為本地版本庫(kù)添加名為origin的遠(yuǎn)程版本庫(kù))

git push -u origin master??(執(zhí)行推送命令,完成GitHub版本庫(kù)的初始化。注意命令行中的-u參數(shù),在推送成功后自動(dòng)建立本地分支與遠(yuǎn)程版本庫(kù)分支的追蹤。)

改變項(xiàng)目地址:

git remote set-url origin https://github.com/sunshineMaria/testgit22.git

git remote -v???? 查看遠(yuǎn)程倉(cāng)庫(kù)信息

說(shuō)明:調(diào)用git commit提交至本地的版本庫(kù),調(diào)用git push將本地版本庫(kù)推送至遠(yuǎn)程版本庫(kù)

問(wèn)題:這里的origin和master指什么?

origin是遠(yuǎn)程的意思,master是master分支。git push -u origin master 表示將本地版本庫(kù)推送到遠(yuǎn)程master分支,-u參數(shù)表示在推送成功后自動(dòng)建立本地分支與遠(yuǎn)程版本庫(kù)分支的追蹤。

修改、提交和撤銷

Git的基本工作流程如下:

改動(dòng)文件:在工作目錄中修改、刪除或添加某些文件

暫存文件:對(duì)改動(dòng)后的文件進(jìn)行快照,保存至?xí)捍鎱^(qū)域

提交快照:將保存在暫存區(qū)域的文件快照永久轉(zhuǎn)儲(chǔ)到Git目錄中

git add .??????????????????????????? 將目標(biāo)文件快照加到暫存區(qū)

git commit -m?‘xxx’ ? ? ? ? ?提交快照到本地倉(cāng)庫(kù)

git commit -a -m ‘xx’ ? ? ? ?把所有已修改和已暫存的文件一并提交

git push ? ? ? ? ? ? ? ? ? ? ? ? ?? 將本地版本庫(kù)推送到遠(yuǎn)程版本庫(kù)

git status ? ? ? ? ? ? ? ? ? ? ? ?? 查看修改了哪些文件

git reset HEAD file ? ? ? ? ? ? 撤銷加入暫存區(qū)的文件到工作區(qū)

git checkout file ? ? ? ? ? ? ? ?工作區(qū)的某文件恢復(fù)到和本地版本庫(kù)一樣,工作區(qū)修改會(huì)被拋棄

git reset --hard origin/master ? ? ? ? ?將本地狀態(tài)回退到和遠(yuǎn)程的一樣,修改的代碼將會(huì)被拋棄

git clean -df ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 刪除與版本庫(kù)不同的新建的文件

差異比較

git diff ? ? ? ? ? ? ? ? ? ?? ?????比較工作目錄文件和暫存區(qū)域快照之間的差異(即修改后還沒(méi)有暫存起來(lái)的變化內(nèi)容)

git diff --cached ? ? ? ? ? ?比較暫存區(qū)快照和上次提交之前的差異

git diff?[--] ? ? ? ? ? ? ? ? ? ?比較工作目錄文件和暫存區(qū)快照之間指定文件的差異

git diff --cached [--] ? ?比較暫存區(qū)域快照和上次提交之間指定文件或目錄的差異

git diff HEAD ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?比較工作目錄文件和上次提交的差異

查看提交歷史

git log ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 按提交時(shí)間列出所有更新

git log -p用來(lái)顯示每次提交的內(nèi)容差異

git log -n ? ? ? ? ? ? ? ? ? ? ? ? 查看最近n次提交

git log --stat ? ? ? ? ? ? ? ? ? ? ? 查看每次提交的粗略內(nèi)容

git log 文件名 ? ? ? ? ? ? ? ? ? 只關(guān)心某個(gè)文件的提交歷史

git show 0bce78b ? ? ? ? ? ?查看某次提交的改動(dòng)

git blame 文件名 ? ? ? ? ? ? ? 查看目前文件的每一行是哪個(gè)提交最后改動(dòng)的

git log --author=名字 ? ? ?查看某個(gè)人的提交

git log -1 HEAD 文件名 ? ? 查看文件的最后提交歷史

git log --pretty=online ? ?可以指定使用不同于默認(rèn)格式的方式展示提交歷史,一行展示,顯示commit id和描述

git log --graph ? ? ? ? ? ? ? ?顯示ASCII圖形表示的分支合并歷史,配合—online更為簡(jiǎn)潔

git log --grep ? ? ? ? ? ? ? ? ?搜索提交說(shuō)明中匹配pattern的提交

git log --since, --after ? ? 僅顯示指定時(shí)間之后的提交git?log?--since=2.weeks

git log?—until,--before ? ?僅顯示指定時(shí)間之前的提交

git?log?--pretty=format:"%h?-?%an,?%ar?:?%s"? 定制顯示的記錄的格式

2008 年 10 月期間,提交的但未合并的測(cè)試腳本(位于項(xiàng)目的 t/ 目錄下的文件)

git?log?--pretty="%h?-?%s"? --since="2008-10-01"?\?--before="2008-11-01"?--no-merges?--?t/

Table 2-1.git log --pretty=format常用的選項(xiàng)

選項(xiàng)說(shuō)明

%H ?提交對(duì)象(commit)的完整哈希字串

%h ?提交對(duì)象的簡(jiǎn)短哈希字串

%T ?樹(shù)對(duì)象(tree)的完整哈希字串

%t ??樹(shù)對(duì)象的簡(jiǎn)短哈希字串

%P ?父對(duì)象(parent)的完整哈希字串

%p ?父對(duì)象的簡(jiǎn)短哈希字串

%an ?作者(author)的名字

%ae ?作者的電子郵件地址

%ad ?作者修訂日期(可以用 --date= 選項(xiàng)定制格式)

%ar ?作者修訂日期,按多久以前的方式顯示

%cn ?提交者(committer)的名字

%ce ?提交者的電子郵件地址

%cd ?提交日期

%cr ?提交日期,按多久以前的方式顯示

%s ??提交說(shuō)明

版本切換回退

參考鏈接:

http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html

git reset HEAD^ ? ?回退到上一個(gè)版本(本地)

git reset 版本號(hào)???? 回退到某一個(gè)版本

兩種情況:

1.沒(méi)有push

git?reset?[--soft?|?--mixed?|?--hard

默認(rèn)mixed: 保留源碼,只是將git commit和index信息回退到了某個(gè)版本

--soft:保留源碼,只回退到commit信息到某個(gè)版本.不涉及index的回退,如果還需要提交,直接commit即可.

--hard:源碼也會(huì)回退到某個(gè)版本,commit和index 都回回退到某個(gè)版本.(注意,這種方式是改變本地代碼源碼)

當(dāng)然有人在push代碼以后,也使用 reset --hard 回退代碼到某個(gè)版本之前,但是這樣會(huì)有一個(gè)問(wèn)題,你線上的代碼沒(méi)有變,線上commit,index都沒(méi)有變,當(dāng)你把本地代碼修改完提交的時(shí)候你會(huì)發(fā)現(xiàn)全是沖突.....

所以,這種情況你要使用下面的方式

2.已經(jīng)push:回退本地代碼也想同時(shí)回退線上代碼,回滾到某個(gè)指定的版本,線上線下保持一致

git revert 版本號(hào)

git push

分支管理

git branch ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 列出本地所有分支

git branch -a ? ? ? ? ? ? ? ? ? ? ? ?? 列出本地和遠(yuǎn)程

git branch -r ? ? ? ? ? ? ? ? ? ? ? ? ? 列出遠(yuǎn)程所有分支

git branch wxj????????????????????????創(chuàng)建分支 wxj

git checkout -b wxj????????????????創(chuàng)建+切換至

git checkout??wxj??????????????????? 切換分支

git merge wxj??????????????????????????合并某分支到當(dāng)前分支

git branch -D wxj????????????????????刪除未合并的分支

git branch -d wxj???????????????????? 刪除已合并的分支

修改遠(yuǎn)程分支:1.重命名本地分支:git branch -m oldname newname 2.刪除遠(yuǎn)程分支 3.推送本地分支到遠(yuǎn)端

git push origin wxj??????????????????提交wxj分支到遠(yuǎn)程分支

git push --set-upstream origin test???????? 提交代碼到遠(yuǎn)程分支test,并且建立本地分支和遠(yuǎn)程分支關(guān)聯(lián)

git push origin --delete serverfix ? 刪除遠(yuǎn)程分支? ?

git push origin :branch-name? ? ? ?刪除遠(yuǎn)程分支。冒號(hào)前面的空格不能少,原理是把一個(gè)空分支push到server上,相當(dāng)于刪除該分支。

git reflog --date=local | grep?branch-name? ?查看某個(gè)分支的歷史記錄,可以看出該分支的來(lái)源分支

stash儲(chǔ)藏工作現(xiàn)場(chǎng)

git stash??????????????????????儲(chǔ)藏工作現(xiàn)場(chǎng)

git stash apply???????????? 恢復(fù)

git stash drop?????????????? 刪除儲(chǔ)藏的工作現(xiàn)場(chǎng)

git stash pop????????????????恢復(fù)+刪除

解決沖突

分支上該文件修改并提交,master該文件也修改并提交。則合并的時(shí)候一定會(huì)沖突,打開(kāi)沖突代碼合并沖突,重新提交。

解決二進(jìn)制文件沖突

git checkout FILE --ours [ --theirs ]?

刪除文件

rm從工作目錄中刪除指定文件,但不從暫存區(qū)域移除

git rm從版本庫(kù)中刪除該文件 git rm后提交 ?git rm test.txt ? ?git commit -m?‘remove text.txt'

git rm --cached ...:僅僅將文件從暫存區(qū)域中移除(其狀態(tài)變?yōu)槲锤櫍粚?duì)該文件進(jìn)行其它操作

git rm -f ? ? ? ? ? ? ? 強(qiáng)制刪除

git rm -r ? ? ? ? ? ? ??遞歸刪除(用于刪除目錄)

git clean ? ? ? ? ? ? ? 清除未跟蹤文件

git clean -n ? ? ? ? ? 顯示將要清除的文

git clean -f ? ? ? ? ? ?強(qiáng)制清除文件(不包括目錄)

git clean -df ? ? ? ?? 強(qiáng)制清除所有文件和目錄

設(shè)置命令別名

git config --global alias.co?checkout

git config --global alias.st?status

git config --global alias.ci?commit

git config --global alias.unstage ‘reset HEAD --'

git config --global alias.last ‘log -1 HEAD’?????????????? 最后一次提交信息

可能遇到的問(wèn)題

你的小伙伴已經(jīng)向origin/dev分支推送了他的提交,而碰巧你也對(duì)同樣的文件作了修改,導(dǎo)致push失敗

解決辦法:

git pull把最新提交從遠(yuǎn)程拉下來(lái),然后在本地合并,解決沖突再推送

git pull也失敗

原因是沒(méi)有指定本地dev與遠(yuǎn)程dev分支的鏈接,根據(jù)提示,設(shè)置dev和origin/dev的鏈接

git branch --set-upstream dev origin/dev

再pull

標(biāo)簽管理

創(chuàng)建和使用git ssh key

首先設(shè)置git的user name和email

git config --global user.name?"XXX"

git config --global user.email "XXX@gmail.com"

git config --list ? ? ? ? ? ? ? ? ? ? ? ?? ?????查看git配置

git config --global user.name? ? ? ? 查看某個(gè)git配置

https://ruby-china.org/topics/2423

查看是否已經(jīng)有了ssh密鑰: cd ~/.ssh?? 如果沒(méi)有密鑰則不會(huì)有此文件夾

ssh-keygen -t rsa -C “xxx@gmail.com”????????生成密鑰

按三個(gè)回車,密碼為空,這里一般不適用密鑰

最后得到兩個(gè)文件 id_rsa和id_rsa.pub

注意:密鑰生成就不用改了,如果已經(jīng)生成就到 ~./ssh 文件夾下去找

忽略一些文件、文件夾不提交

在倉(cāng)庫(kù)根目錄下創(chuàng)建名稱為“.gitignore”的文件,寫入不需要的文件夾名或文件,每個(gè)元素占一行即可,如

target

bin

*.db


用戶名郵箱提交錯(cuò)了,修改辦法

1、git rebase -I HEAD~2

2、pick —> edit

3、git commit --amend --author=“xx <xx@yy.com>" --no-edit ? ? ?

4、git rebase —continue

5、繼續(xù)?git commit --amend --author=“xx <xx@yy.com>" --no-edit

6、git rebase —continue

7、會(huì)看到Successfully rebased and updated refs/heads/master

8、git push --force ?【有點(diǎn)危險(xiǎn),盡量減少】

上面的操作無(wú)法修改第一次提交,第一次提交用orphan 分支試試

1、git checkout —orphan source

2、git commit -m ‘init’

3、git branch -m master oldmaster

4、git branch -m source master

5、git branch --set-upstream-to=origin/master master

6、git push -f

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容