Git 使用指南

git命令 版本控制

Git 簡(jiǎn)介

Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)厨诸。

如果你是小白,請(qǐng)先看這里: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

git操作流程圖

專(zhuān)用名詞

  • Workspace: 工作區(qū)
  • Index / Stage: 暫存區(qū)
  • Repository: 倉(cāng)庫(kù)區(qū) ( 本地版本庫(kù) )
  • Remote: 遠(yuǎn)程倉(cāng)庫(kù) ( 遠(yuǎn)程倉(cāng)庫(kù) / 遠(yuǎn)程版本庫(kù) )

Git 工作流

Fork a repo

https://help.github.com/en/articles/fork-a-repo

Creating a pull request from a fork

https://help.github.com/en/articles/creating-a-pull-request-from-a-fork

代碼庫(kù)

在當(dāng)前目錄新建一個(gè)Git代碼庫(kù)

git init

新建一個(gè)目錄秉溉,將其初始化為Git代碼庫(kù)

git init [project-name]

克隆代碼庫(kù), 默認(rèn)克隆所有分支

git clone [url]

克隆指定分支代碼

git clone [url] -b [branch name]

eg.
git clone https://github.com/vuejs/vuex.git -b dev

克隆默認(rèn)分支最新一次提交

git clone [url] --depth=1

eg.
git clone https://github.com/reiinakano/fast-style-transfer-deeplearnjs.git --depth=1

克隆指定分支指定層數(shù)

git clone -b [branch name] [url]  --depth=1

克隆 dev 分支最近一次提交 eg.
git clone -b dev  https://github.com/vuejs/vuex.git --depth=1

Git 配置

Git的設(shè)置文件為 .gitconfig 肴裙,它可以在用戶(hù)主目錄下(全局配置)放棒,也可以在項(xiàng)目目錄下(項(xiàng)目配置)。

顯示當(dāng)前Git配置

git config --list

編輯Git配置文件

git config -e [--global] 

設(shè)置代碼時(shí)的用戶(hù)信息 建議設(shè)置此項(xiàng)兜辞,后面的操作會(huì)很方便

git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

增加/刪除文件

操作之前先執(zhí)行 git status 查看一下?tīng)顟B(tài)

添加文件到暫存區(qū) 建議使用這種方式進(jìn)行操作

git add [file1] [file2] ...

添加所有改動(dòng)到暫存區(qū)

git add .

刪除工作區(qū)文件迎瞧,并且將這次刪除放入暫存區(qū)

git rm [file1] [file2] ...

停止追蹤指定文件,但該文件會(huì)保留在工作區(qū)

git rm --cached [file]

代碼提交

操作之前先執(zhí)行 git status 查看一下?tīng)顟B(tài)

提交暫存區(qū)到倉(cāng)庫(kù)區(qū)

git commit -m [message]

提交暫存區(qū)的指定文件到倉(cāng)庫(kù)區(qū)

git commit [file1] [file2] ... -m [message]

重做上一次commit逸吵,并包括指定文件的新變化

git commit --amend [file1] [file2] ...

分支

列出所有本地分支

git branch

列出所有遠(yuǎn)程分支

git branch -r

列出所有本地分支和遠(yuǎn)程分支

git branch -a

新建一個(gè)分支凶硅,但依然停留在當(dāng)前分支

git branch [branch-name]

新建一個(gè)分支,并切換到該分支

git checkout -b [branch]

切換到指定分支扫皱,并更新工作區(qū)

git checkout [branch-name]

合并指定分支到當(dāng)前分支

git merge [branch]

刪除本地分支

git branch -d [branch-name]

刪除遠(yuǎn)程分支

git push origin --delete [branch-name]
或者 
git branch -dr [remote/branch]

恢復(fù)刪除的分支 Git 分支刪除后恢復(fù)

git branch new_branch commitId

查看信息

查看改動(dòng)的文件

git status

查看當(dāng)前分支的版本日志

git log

查看單行日志

git log --pretty=oneline

查看日志主題

git log --pretty=format:%s

查看 commit 的最新編號(hào)

git rev-parse HEAD

顯示暫存區(qū)和工作區(qū)的差異

git diff

顯示今天寫(xiě)了多少行代碼

git diff --shortstat "@{0 day ago}"
git log --author="$(git config --get user.name)" --no-merges --since=1am --stat

過(guò)濾 commit . git log --grep

git log --grep chore 
git log --grep --author="John"

標(biāo)簽

列出現(xiàn)有標(biāo)簽

git tag

創(chuàng)建一個(gè)含附注類(lèi)型的標(biāo)簽

git tag -a v0.5.0 -m 'version 0.5.0'

git show 顯示各種類(lèi)型的對(duì)象足绅。查看相應(yīng)標(biāo)簽的版本信息,同時(shí)顯示打標(biāo)簽時(shí)的提交對(duì)象

git show v0.5.0

push 單個(gè) tag

git push origin [tagname]

eg:
git push origin v1.0  #將本地v1.0的tag推送到遠(yuǎn)端服務(wù)器

push 所有 tag , 如果不起作用韩脑,在 Git 控制臺(tái)確認(rèn)賬號(hào)是否有權(quán)限推送 Tag

git push origin --tags

刪除本地標(biāo)簽

git tag -d [tagName]

刪除遠(yuǎn)程標(biāo)簽

git push origin :refs/tags/[tagName]

遠(yuǎn)程同步

下載遠(yuǎn)程倉(cāng)庫(kù)的所有變動(dòng)

git fetch [remote]

顯示所有遠(yuǎn)程倉(cāng)庫(kù)

git remote -v

修剪 - 刪除與 origin 相關(guān)的陳舊引用

git remote prune origin 

拉取遠(yuǎn)程倉(cāng)庫(kù)的變化氢妈,并與本地分支合并

git pull [remote] [branch]

上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)

git push [remote] [branch]

強(qiáng)行推送當(dāng)前分支到遠(yuǎn)程倉(cāng)庫(kù),即使有沖突 謹(jǐn)慎使用

git push [remote] --force

推送所有分支到遠(yuǎn)程倉(cāng)庫(kù)

git push [remote] --all

Git 證書(shū)問(wèn)題

臨時(shí)生效段多,退出shell后失效

export GIT_SSL_NO_VERIFY=true 

永久生效

echo 'export GIT_SSL_NO_VERIFY=true' >> ~/.bashrc 

win10 出現(xiàn)證書(shū)問(wèn)題 解決方式

git config --global http.sslVerify false

撤銷(xiāo)

恢復(fù)暫存區(qū)的指定文件到工作區(qū)

git checkout [file]

恢復(fù)某個(gè)commit的指定文件到暫存區(qū)和工作區(qū)

git checkout [commit] [file]

恢復(fù)暫存區(qū)的所有文件到工作區(qū)

git checkout .

重置暫存區(qū)的指定文件首量,與上一次commit保持一致,但工作區(qū)不變

git reset [file]

重置暫存區(qū)與工作區(qū)进苍,與上一次commit保持一致

git reset --hard

回滾到指定版本

git reset --hard [commitId]

重建版本庫(kù)

rm -rf .git
git init
git add . 
git commit -m 'git init  first commit'
git remote add origin <github_repo_url>
git push -f -u origin master

添加遠(yuǎn)程倉(cāng)庫(kù)

cd existing_folder
git init
git remote add origin git@git.sg-ai.com:ywguo/Test.git
git add .
git commit -m "Initial commit"
git push -u origin master

Stashing 儲(chǔ)藏

儲(chǔ)藏當(dāng)前工作區(qū)

git stash

查看儲(chǔ)藏狀態(tài)

git stash list

恢復(fù)儲(chǔ)藏工作區(qū)狀態(tài)

git stash apply

如何創(chuàng)建公鑰

  1. 首先啟動(dòng)一個(gè)Git Bash窗口(非Windows用戶(hù)直接打開(kāi)終端)

  2. 執(zhí)行:cd ~/.ssh
    如果返回“… No such file or directory”加缘,說(shuō)明沒(méi)有生成過(guò)SSH Key,直接進(jìn)入第4步
    否則進(jìn)入第3步備份

  3. 備份:

mkdir key_backup
mv id_isa* key_backup
  1. 生成新的Key:(引號(hào)內(nèi)的內(nèi)容替換為你自己的郵箱)
ssh-keygen -t rsa -C "your_email@youremail.com"

輸出顯示:

>Generating public/private rsa key pair. Enter file in which to save the key 
(/Users/your_user_directory/.ssh/id_rsa):<press enter>

直接回車(chē)觉啊,不要修改默認(rèn)路勁拣宏。

>Enter passphrase (empty for no passphrase):<enter a passphrase>
Enter same passphrase again:<enter passphrase again>

設(shè)置一個(gè)密碼短語(yǔ),在每次遠(yuǎn)程操作之前會(huì)要求輸入密碼短語(yǔ)杠人!閑麻煩可以直接回車(chē)勋乾,不設(shè)置宋下。

  1. 成功:
Your identification has been saved in /Users/your_user_directory/.ssh/id_rsa.
Your public key has been saved in /Users/your_user_directory/.ssh/id_rsa.pub.
The key fingerprint is:
... ...
  1. 提交公鑰:

    6.1 找到.ssh文件夾,用文本編輯器打開(kāi)“id_rsa.pub”文件辑莫,復(fù)制內(nèi)容到剪貼板杨凑。

    6.2 打開(kāi) https://github.com/settings/ssh ,點(diǎn)擊 Add SSH Key 按鈕摆昧,粘貼進(jìn)去保存即可。

git設(shè)置用戶(hù)名密碼

設(shè)置 git 用戶(hù)名/郵箱

git config --global user.name [username]
git config --global user.email [email]

但是這個(gè)僅僅是設(shè)置用戶(hù)名密碼蜒程,如果你的Git 源每次操作需要你輸入用戶(hù)名/密碼驗(yàn)證绅你,你依然需要每次設(shè)置,那么該如何辦呢昭躺?

git 保存用戶(hù)名密碼

這里主要是配置一個(gè) config 項(xiàng)

有兩個(gè)方法忌锯,基本上原理都是一樣,都是修改 .git/config 文件

1.使用如下命令领炫,修改 config 文件即可保存

echo "[credential]" >> .git/config
echo "    helper = store" >> .git/config

2.直接修改 .git/config 文件

在 Linux/mac 下可以直接使用 vim 工具修改 config 文件

ubuntu@VM-7-212-ubuntu:~/kernel-code/kernel-netfilter-sample-code$ vim .git/config

##修改成如下

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = https://github.com/Miss-you/kernel-netfilter-sample-code.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
##主要是后面這兩行偶垮,如果不想保存,則刪除即可
[credential]
    helper = store

##保存

這樣就可以保存用戶(hù)名密碼帝洪,不用每次都輸入了似舵!

git config 查看配置

使用 git config --list 查看已設(shè)配置

feiqianyousadeMacBook-Pro:xt_GTPU yousa$ git config --list
core.excludesfile=/Users/yousa/.gitignore_global
user.name=Miss-you
user.email=snowfly1993@gmail.com
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
remote.origin.url=https://github.com/Miss-you/xt_GTPU.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master

Git 修改默認(rèn)編輯器為 vim

git config --global core.editor vim

操作規(guī)范

提交到倉(cāng)庫(kù) description 需要有意義命名

git commit -m [description]

分支請(qǐng)及時(shí)合并清理

git merge [branch]
git push [remote] [branch]
git branch -d [branch-name]
git push origin --delete [branch-name]
  • 友情提示: 目前只是現(xiàn)在工作中用到的命令整理,如果沒(méi)有您需要的葱峡,請(qǐng)自行 google

  • 文檔持續(xù)更新中砚哗,歡迎大家拍磚 ...

    ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市砰奕,隨后出現(xiàn)的幾起案子蛛芥,更是在濱河造成了極大的恐慌,老刑警劉巖军援,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仅淑,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胸哥,警方通過(guò)查閱死者的電腦和手機(jī)涯竟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)烘嘱,“玉大人昆禽,你說(shuō)我怎么就攤上這事∮ィ” “怎么了醉鳖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)哮内。 經(jīng)常有香客問(wèn)我盗棵,道長(zhǎng)壮韭,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任纹因,我火速辦了婚禮喷屋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瞭恰。我一直安慰自己屯曹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布惊畏。 她就那樣靜靜地躺著恶耽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颜启。 梳的紋絲不亂的頭發(fā)上偷俭,一...
    開(kāi)封第一講書(shū)人閱讀 49,760評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音缰盏,去河邊找鬼涌萤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛口猜,可吹牛的內(nèi)容都是我干的负溪。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼暮的,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼笙以!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起冻辩,我...
    開(kāi)封第一講書(shū)人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猖腕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后恨闪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體倘感,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年咙咽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了老玛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡钧敞,死狀恐怖蜡豹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溉苛,我是刑警寧澤镜廉,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站愚战,受9級(jí)特大地震影響娇唯,放射性物質(zhì)發(fā)生泄漏齐遵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一塔插、第九天 我趴在偏房一處隱蔽的房頂上張望梗摇。 院中可真熱鬧,春花似錦想许、人聲如沸伶授。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谎砾。三九已至,卻和暖如春捧颅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背较雕。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工碉哑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人亮蒋。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓扣典,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親慎玖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贮尖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

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