常用的Git命令

mkdir 创建空目录
pwd 显示当前目录
cat <file> 查看文件的内容
git init 初始化一个Git仓库:把目录变成Git可以管理的仓库,
目录下会多一个.git目录,这是Git的版本库

Is -ah显示目录下所有文件夹,包括默认隐藏的.git目录。
image
git add 把文件添加到暂存区

git commit -m "说明"  把暂存区的所有内容提交到当前分支

git status 查看状态

git diff <file> 查看修改的内容(工作区和暂存区的不同,
工作区和原来的不同)
git log 显示从最近到最远的提交日志(版本)

git log --pretty=oneline 简化输出信息

git relog 显示命令历史

用带参数的git log可以看到分支的合并情况:
git log --graph --pretty=oneline --abbrev-commit
git reset --hard HEAD^ 回退到上一个版本
注意:hard前有--

git reset --hard commit_id  回退到指定版本,commit id
版本号写前几位就可以。

git diff HEAD -- <file> 查看工作区和版本库里面最新版本的区别

git checkout -- <file> 把文件在工作区的修改撤销,回到最近一次git commit或git add时的状态。
可用于修改后还没add到暂存区的撤销

git reset HEAD <file> 把暂存区的修改撤销掉(unstage),
重新放回工作区

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区,当用HEAD时,表示最新的版本。

  • 撤销未add到暂存区(即撤销工作区)的修改:git checkout -- <file>

  • 撤消已add,未commit到分支(即撤销暂存区)的修改:第一步,git reset HEAD <file>;第二步,git checkout -- <file>

  • 撤销本次已commit到分支(提交到版本库)的修改:git reset --hard HEAD^

rm <file> 删除文件。工作区和版本库就不一致了

git checkout -- <file>用版本库里的版本替换工作区的版本,
无论工作区是修改还是删除。

//IDEA的revert相当于git checkout -- <file>

git rm <file>  --> git commit
从版本库中删除该文件,要git commit

分支

创建与合并分支

HEAD是指向master,master指向提交的。所以,HEAD指向的就是当前分支。

master分支是一条线,master是一个指针。

当创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:


image
git checkout -b dev 创建dev分支,然后切换到dev分支

//相当于 git branch dev创建 + git checkout dev 切换分支  

git branch 列出所有分支,当前分支前标一个*号

git merge 合并指定分支到当前分支

如:git merge dev 把dev分支的工作成果合并到master分支上。
  (Fast-forward,快进模式:直接把master指向dev的当前提交)
  
git branch -d dev 删除dev分支  
git log --graph --pretty=oneline --abbrev-commit  可以看到分支的合并情况(graph图表)
合并冲突

当Git无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成。

创建+切换分支feature1,对内容a修改成AND --> add,commit

然后切换分支master,对内容a修改成& --> add,commit

这种情况下,Git无法执行“快速合并”。

若是git merge feature1, 文件中Git用<<<<<<< , ======= , >>>>>>>
标记出不同分支的内容。
此时若是git checkout feature1,会切换失败,error: you need to resolve your current index first
readme.txt: needs merge

修改成and后保存,再add,commit。合并完成。(master会向前一个提交,feature1不动)

若再切换到feature1分支,其内容依然为AND。

最后删除feature1分支 git branch -d feature1
合并模式:
  • Fast forward,快进模式。
git merge dev 直接把master指向dev的当前提交。

这种模式下合并,看不出来曾经做过合并。删除分支后,会丢掉分支信息。


image
  • --no-ff方式的git merge,普通模式合并。
git merge --no-ff -m "merge with no-ff" dev

这种模式合并,要创建一个新的commit,
所以加上-m参数,把commit描述写进去。

合并后的历史有分支,能看出曾经做过合并。


image

这相当于有合并冲突,修改冲突后再提交。

Bug分支

从哪个分支修改bug就从哪个分支创建临时分支。如,在master分支上修复

git stash 把未提交的工作现场“储藏起来”,
          等以后恢复现场后继续工作

切换到master分支 -->
创建并切换到临时分支 -->
修复bug,修改内容 --> 
提交add,commit --> 
切换到master分支,完成合并 --> 
删除临时分支

git stash list 查看所有的“储藏”

恢复工作现场:
方法1:git stash apply恢复+git stash drop删除stash内容
方法2:git stash pop 恢复+删除stash内容

可以多次stash,恢复的时候,先用git stash list 查看,然后恢复指定的stash,用命令:

git stash apply stash@{0}
git branch -D <name> 强行删除没有被合并过的分支

远程仓库

先有本地库,后有远程库。添加+关联

Create a new repo按钮,输入name,点击create repository新建仓库。

git remote add origin git@github.com:amyyanjie/test.git在本地关联远程库

git push -u origin master把本地库当前分支master推送到远程
第一次推送master分支时,加-u参数。
Git不但推送,还会把本地和远程的master分支关联起来

git push origin master   把本地master分支的最新修改推送到GitHub 
从远程库克隆
git clone git@github.com:amyyanjie/learngit.git

当从远程仓库克隆时,Git自动把本地的master分支和远程的master分支对应起来了。远程仓库的默认名称是origin。

git remote -v查看远程库信息

git remote rm origin 删除已有的GitHub远程库

多人协作

git remote 查看远程库的信息
git remote -v 显示更详细
git push origin <branchName> 把该分支推送到远程库对应的远程分支上 

git clone git@github.com:amyyanjie/learngit.git
//当从远程仓库clone时,默认情况下,只能看到本地的master分支。

这时,要在dev分支上开发,就必须创建远程origin的dev分支到本地
git checkout -b dev origin/dev  然后就可以在dev分支上修改,
并时不时 git push origin dev

git checkout -b <branchName> origin/<branchName> 在本地创建和远程分支对应的分支

git pull 拉取所有分支到本地
git pull = git fetch + git merge

一般用git pull origin <branchName>

多人协作的工作模式

  • 1、首先,试图用git push origin <branchName> 推送修改;

  • 2、如果推送失败,则因为远程分支比本地更新,需要先用git pull试图拉取合并。

    若git pull提示"no tracking information",说明没有指定本地分支与远程分支的链接:

    git branch --set-upstream <branchName> origin/<branchName>
    或git branch --set-upstream-to=origin/<branchName> <branchName>
    

    再git pull就能成功

  • 3、若git pull成功,但显示合并有冲突,需要手动解决,并在本地提交

  • 4、没有冲突或解决掉冲突后,再用git push origin <branchName>推送就能成功

标签

git tag <name> 打标签。如git tag v1.0
先要切换到需要打标签的分支上。

默认标签是打在最新提交的commit上的。

也可指定一个commit id创建标签:
git tag <name> <commitId>

git tag -a <tagName> -m "说明" <commitId> 创建带有说明的标签
用-a指定标签名,-m指定说明文字

git tag -s <tagName> -m "说明" <commitId>  通过-s用私钥签名一个标签。
签名采用PGP签名,必须首先安装gpg(GnuPG)

git tag查看所有标签

git show <tagName> 查看标签信息
        
 git push origin <tagNamae> 推送某个标签到远程
 
 git push origin --tags 推送全部尚未推送到远程的本地标签
 
  git tag -d <tagName>  从本地删除标签
  
  git push origin :refs/tags/<tagName> 删除远程标签
 
git config --global alias.st status 配置别名

配置GIt的时候,如果不加--global,只针对当前仓库起作用。

每个仓库的Git配置文件都放在.git/config文件中。而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中。

学习资料:

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

推荐阅读更多精彩内容