二、git常用操作

将工作区的代码提交到暂存区,再提交到当前的本地分支

# 将代码从工作区提交到暂存区
git add index.html
# 将暂存区的代码提交到当前的本地分支
git commit -m "提交了修改"

工作区 ----- add------> 暂存区 ---- commit ----> 当前本地分支

查看修改的地方:git diff index.html(工作区和暂存区diff)或者git diff HEAD -- index.html(工作区和版本库里面最新版本diff)
查看暂存区的文件状态:git status


版本回退

  1. 回退到上一个版本
git reset --hard HEAD^

在git中,用HEAD表示当前版本,上一个版本就是HEAD,上上一个版本就是HEAD^...上100个版本就是HEAD~100

  1. 回退到某个版本
# 1094a是版本号,可以不写全
git reset --hard 1094a

查看版本号:git log
查看版本号(简易显示):git log --pretty=oneline
查看历史出现过的所有版本号:git reflog


第一次修改 -> git add -> 第二次修改 -> git commit

执行git commit后,被提交的修改只有第一次的,而没有第二次的,因为第二次的修改仍在暂存区,所以若要把第二次修改也提交,需再执行一次 git add -> git commit


撤销修改,回到暂存区

git checkout -- readme.txt

git checkout -- readme.txt会把readme.txt文件在工作区的修改全部撤销,但有两种情况:
1、readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
2、readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commitgit add时的状态。

我的理解:该命令就是将工作区的文件回退到暂存区的样子,因为第一种情况下文件修改后还没有被放到暂存区,所以暂存区和版本库里是一样的,所以第一种情况下回到版本库也是回到暂存区

抛弃暂存区的修改

修改了文件,又git add到暂存区了,但并未commit,这种情况下撤销缓存区:

git reset HEAD readme.txt

git reset命令既可以回退版本,又可以撤销暂存区

撤销总结

情形:修改第一次---- add ----> 修改第二次

git status打印:


场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>抛弃缓存区,这样缓存区干净了,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退git reset --hard HEAD^,不过前提是没有推送到远程库。


删除文件

情形:添加了新文件test.txt,并commit到了git

若直接在本地rm test.txt后,git status会提示有文件被删除了,也就是版本库里依然有这个文件
所以要git rm删掉,并且git commit,这样版本库中才被删除


分支

查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
克隆指定分支:git clone -b name url

Fast forward模式合并分支,解决冲突

情形:在master上新建dev分支,切回master分支,在master上加上A and B,执行addcommit,再切到dev,在dev上加上了A & B,然后执行addcommit,切回master,在master上将dev合并到当前分支git merge dev,出现冲突

出现冲突后:
1.解决冲突,将master的两个箭头二选一,选择A and B
2.执行addcommit
若要查看分支合并图:git log --graph

如果master上有修改,而并未addcommit,就切换到dev上,则master的修改也会带到dev

不使用Fast forward模式合并分支

情形:在master分支上新建并切换到dev分支,在dev分支上做了修改并addcommit,再切回到master分支,执行非快速合并git merge --no-ff -m "合并" dev,再git log --graph

保存工作现场

情景:现在在dev分支上修改了一堆文件,突然来了一个任务,需要切到别的分支上去,而dev上的修改又不能commit,如果直接切到新的分支上,那么当前的修改也会带过去,即使add了修改文件也会把修改带过去

git stash

这个命令会把工作现场保存起来,如果用git status查看工作区,就是干净的(除非有没有被Git管理的文件,如新增的文件)

查看工作现场:git stash list
恢复现场但不删除stash:git stash apply
删除stash:git stash drop
恢复现场并删除stash:git stash pop

推送分支

#将本地的dev分支,推送到,远程origin仓库的ff分支,远程没有ff分支将创建ff
git push origin dev:ff
#将当前分支push到远程的dev上
git push origin dev

查看远程库:git remote
查看远程分支:git branch -a

将远程某个分支拉下来

#将远程的dev分支拉到本地,并新建为dev
git checkout -b dev origin/dev

如果拉取不下来,提示远程没有origin/dev,则是本地没有更新,git pull一下


push冲突

情景:我再origin/dev分支上做了修改,另一人也在origin/dev做了修改并先我一步push了上去,现在我要push的时候冲突了

#解决冲突要先pull
git pull
#执行pull后,就有提示,要先解决冲突,方法跟合并分支时遇到冲突的解决方法一样
#修改冲突后,add、commit
git add ...
git commit ...
#再push,就没问题了
git push

丢掉commit,回到commit之前的、编辑过的、待commit的状态

场景:a状态工作空间是干净的,然后编辑某个文件,到了b状态,再add、commit,到了c状态,现在发现多commit了一个文件,想丢掉commit,回到之前编辑的状态b

  1. git log,找到上一个commit的id,也就是a状态的id,从上往下第二个,叫huifu_id
  2. git reset huifu_id

将远程仓库的多个commit合成一个

#先将本地的多个commit合成一个,40111daac是最早提交的一个id
git reset --soft 40111daac
git commit --amend
#强制push到远程
git push origin tangchao-essensial -f

将文件回退到某个版本

场景:想将file.js文件回退到某个commit
git checkout commit_id file.js

arc

arc land 分支(不写默认当前分支) --onto develop-test : 将当前分支合到另一个分支

Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively

当我们在本地提交到远程仓库的时候,如果遇到上述问题,我们可以首先使用如下命令:
git rebase origin/master
然后使用
git pull --rebase
最后使用
git push origin master

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

推荐阅读更多精彩内容

  • Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来。这样一来,任何一处协同...
    __silhouette阅读 15,846评论 5 147
  • Git 命令行学习笔记 Git 基础 基本原理 客户端并不是只提取最新版本的文件快照,而是把代码仓库完整的镜像下来...
    sunnyghx阅读 3,897评论 0 11
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
    君惜丶阅读 3,485评论 0 13
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,638评论 4 54
  • 喜欢画画的人,总能找到乐趣,这是我一个朋友的评语。 是啊,犹记好多年前,当我开始驴行外面的世界时,总是发现缺少了点...
    叽哩咕噜AMY猫阅读 311评论 1 4