美文网首页
二、git常用操作

二、git常用操作

作者: 卡农me | 来源:发表于2018-06-13 15:39 被阅读37次

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

    # 将代码从工作区提交到暂存区
    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

    相关文章

      网友评论

          本文标题:二、git常用操作

          本文链接:https://www.haomeiwen.com/subject/jgijeftx.html