git命令
版本控制
Git 簡(jiǎn)介
Git是目前世界上最先進(jìn)的分布式版本控制系統(tǒng)厨诸。
如果你是小白,請(qǐng)先看這里: http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
專(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)建公鑰
首先啟動(dòng)一個(gè)Git Bash窗口(非Windows用戶(hù)直接打開(kāi)終端)
執(zhí)行:
cd ~/.ssh
如果返回“… No such file or directory”加缘,說(shuō)明沒(méi)有生成過(guò)SSH Key,直接進(jìn)入第4步
否則進(jìn)入第3步備份備份:
mkdir key_backup
mv id_isa* key_backup
- 生成新的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è)置宋下。
- 成功:
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:
... ...
-
提交公鑰:
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ù)更新中砚哗,歡迎大家拍磚 ...
?