git 常用命令

配置git

git config --global user.name/user.email
// 配置级别
 --local // 默认,高优先级,只影响本仓库
--global // 中, 影响到当前用户的所有git仓库
--system // 低, 影响全局git 仓库

初始化仓库

git init [[path]/ [path]--bare]

基本操作

git status // 对状态的跟踪 内容状态:工作目录/ 暂存区/提交区  文件状态: 未跟踪/已跟踪
git add // 添加文件到暂存区(同时文件被跟踪)
git add . // 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u // 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A  // 是上面两个功能的合集(git add --all的缩写)
git rm // 删除
-- cached // 仅从暂存区删除
--f // 从暂存区与工作目录删除
git rm $(git ls-files --deleted) // 删除所有被跟踪,但是在工作目录被删除的文件
git ls-files // 展示所有被跟踪的文件
git checkout -- <file>  // to discard changes in working directory(撤销工作目录的修改,缓存区内容覆盖工作目录)
git reset HEAD <file> // to unstage (撤销暂存区内容, 即暂存区被提交区内容覆盖)
git checkout HEAD -- <file> // 提交区的内容覆盖暂存区和工作目录,即撤销所有修改到上次commit

git commit // 提交到 提交区
-m 'message' // 提交时的message
-a -m'message' // 直接从工作目录提交到提交区
-m"message" -n // m:message, n :no-verify

git-log // 查看提交的历史记录
--oneline // 简短记录,一行

git 中别名的设置

git config alias.<shortname>  '<fullcommand>' // 为fullcommand 配置别名shortname
// eg:
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
 "

显示工作目录与暂存区的差异

git diff // 工作目录与暂存区的差异
git diff -cached [<reference>] // 暂存区与某次提交差异,默认为HEAD
git diff <reference> // 工作目录与某次提交的差异

忽略文件

.gitignore //在添加时忽略匹配文件,仅作用于**未跟踪**的文件

分支管理

git branch // 分支的增删改查
git branch <branchName> // 查看分支
git branch -a // 查看本地和远程分支
git branch -m "daily/0.0.1" // 在本分支修改名字
git branch –d <branchName> // 如果是要删除本地已经合并了的分支
git branch –D <branchName> // 如果是要删除本地未合并的分支
git branch -v 显示所有分支信息
git checkout <branchName> 通过移动HEAD检出版本,切换分支
git checkout -b <branchName> 创建分支,并切换到该分支
git checkout -b <branchName> origin/<branchName> 以origin/branchName 为基础创建分支并切换到该分支
git fetch origin <origin branchName>:<local branchName> // 使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。

git reset -将当前分支会退到历史某个版本
git reset --mixed <commit> // (默认), 把分支(branch&HEAD)移动到 commit, 且把暂存区内容替换为commit
git reset --soft <commit> // 暂存区和工作目录不改变
git reset --hard <commit> // 且把暂存区和 工作目录都用commit内容替换掉
// reset 捷径
A^ // A的上一次提交
A~n // A之前的第n次提交
// eg:
git reset HEAD^
git reset HEAD~5
git reset HEAD 撤销 add .到add 前。
git reset --hard HEAD^ 撤销到commit的上一次,如果要撤销到上99次,可以用 git reset --hard~99;
git reset --hard 9425c47b6 //版本号

git reflog // 查询所有提交log,包括回退前的版本

git stash // 保存当前的暂存区和工作目录到git stash 栈中,并从最近的一次提交中读取相关内容,让暂存区和工作目录保持clean,从而可以切换分支等一系列操作。
git stash save 'message' // 同 git stash 并增加 message,便于理解保存内容
git stash pop: 从Git stash栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash apply stash@{0} // 让保存的stash@{0} 中的内容从新回到工作目录和暂存区
git stash drop stash@{0} // 删除git stash栈中的stash@{0}内容
git stash list: 显示Git stash栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

git merge // 合并分支, 默认为 fast-forward合并
git merge branchA // 把branchA 合并到当前分支
git merge branchA branchB // 把branchA合并到branchB
git merge --no-ff  branchA // 合并分支,并保留分支的合并信息
git cat-file -p HEAD|| branch|| commitHash // 查看具体分支的详细信息 -p 参数为 'Pretty-print the contents of object based on its type.'

reset vs checkout

reset 与checkout命令对比图

rebase 变基

git rebase branchA// 检修提交历史基线,使合并的分支branchA成为线性
git rebase -- onto branchA commitId // 同上,只不过合并了commitId,而不是本分支的所有内容。
尽量不要在共有分支上使用rebase,因为rebase会从新生成commitID会导致你本地的部分commidId和队友的不同,从而造成没必要的冲突

git rebase 
while(存在冲突) {
    git status
    找到当前冲突文件,编辑解决冲突
    git add -u
    git rebase --continue
    if( git rebase --abort ) 如果rebase过程中,你想中途退出,恢复rebase前的代码则可以用命令 
        break; 
}
使用git rebase合并多次commit
1.首先使用git log查看一下提交历史
2. git 压缩  git rebase -i HEAD~4

git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase

git rebase -i 的使用

使用别名

git tag tagName branch || commitId // 把 此时此刻的branch 或者commitId 打上名为tagName 的tag
git tag -l // 列出tag的list
git push origin tagName // 把tag推到origin

创建本地远程提交仓库

git init [path] --bare // --bare 表示为裸仓库,是因为这个仓库只保存git历史提交的版本信息

远程提交

源仓库和远程仓库合并
git remote -v 查看远程主机状态
git remote rm origin 删除远程仓库
git remote add upstream git@github.com:xxx/xxx.git 添加源仓库地址
git fetch upstream 从源仓库更新同步代码
git merge upstream/master 合并到本地代码
git push 向自己远程仓库推送刚才同步源仓库后的代码

git fetch // 本地更新远程同步
$ git push origin newBranch  // 把分支同步到远程,如果远程没有该分支,直接创建一个(但是前提是local分支名字要和远程相同)
git push origin --delete thisBranch // 删除远程分支

git clone   // 克隆一个远程仓库

gid

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容