Git总结

Git总结

  • 介绍
  • 常用操作
    • 一. 放弃本地修改
      • 1、没有git add 的
      • 2、已经git add的
      • 3、已经git commit的
      • 4、全部与远程仓同步,强制覆盖本地修改。
    • 二. 分支管理
      • 1、处理游离状态detached
      • 2、将A分支的一笔提交合并到另一个B分支
      • 3、解决冲突conflict
    • 三. 仓库管理
      • 修改本地仓关联的远程仓
  • 常用API
    • checkout用法

本文会持续更新,欢迎各位私信指正~~

介绍

Git总结_第1张图片
工作区:就是电脑里本地能看到的目录,它持有实际文件。
缓存区/暂存区:英文名叫 stage 或 index。在执行git add命令之后,会把工作区的修改记录添加到缓存区以便跟踪。它像个缓存区域,临时保存你的改动。
说明:缓存区的文件一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区也叫作索引(index)。
版本库/本地仓:英文名Repository,管理代码版本的地方,在执行git commit命令之后,会把缓存区的修改记录提交到版本库里。
说明:在一个空文件下,执行git init命令之后,会在该文件下创建一个版本库(.git),它是一个隐藏的目录。

常用操作

一. 放弃本地修改

1、没有git add 的

$ git restore <某文件>… #在工作区,撤销对某文件的修改
如果是放弃所有文件里的修改,直接使用git restore.
说明:此命令只针对已经修改的内容和已经删除的文件,但不会删除刚新建的文件,因为刚新建的文件还没有加入到git的管理系统中。所以对于git来说,刚新建的文件是未知的。自己动手删除即可。

2、已经git add的

情况说明:已经修改的文件已经add到暂存区/缓存中了,但是没有commit,此时如果不想提交这个文件的修改。
$ git restore --staged <某文件>…
如果是放弃所有修改,直接使用git restore --staged .

3、已经git commit的

  1. 提交的文字说明写的不合适,需要修改时可如下操作。
    保留已经提交源码,只是将git commit和index信息回退到某个版本,push入远端库之前提交的commit信息还在。
    $ git reset --soft
  2. 提交的文字说明没问题,但index信息需要回退到某个版本,需要修改时可如下操作。
    $ git reset --mixed
  3. 本地仓的源码,文字说明和index,全部回退到某个版本,相当于清空某个版本以后的提交记录。
    $ git reset --hard
    上面时按照commit_id回退的,也可以按照提交次数回退,如下:
    $ git reset --hard HEAD^^或者gitreset --hard HEAD~2 #回退2次

4、全部与远程仓同步,强制覆盖本地修改。

1) $ git fetch --all // 拉去所有的更新,不同步;
2) $ git reset --hard origin/master // 本地代码同步远程最新版本(会覆盖本地所有与远程仓库上同名的文件),git reset指令把HEAD指向master最新版本。
3) $ git pull // 再次更新,其实也可以不用执行这一步,因为第2步命令已经保证了与远程仓相同。
简化命令:$ git fetch --all && git reset --hard origin/master && git pull

二. 分支管理

git branch branchname // 新建分支branchname
git branch // 查看本地所有分支
git branch -a //查看本地和远程所有分支
git branch -r //查看远程所有分支
git branch -d branchname //删除本地分支(-d不生效时可以使用-D)
git branch -m oldbranchname newbranchname // 重命名分支

1、处理游离状态detached

  • 如果在游离状态没有修改,可以直接切换正常分支
    git checkout workbranch
  • 如果将游离状态的修改,合并到新建分支:
    git checkout -b workbranch
  • 如果将游离状态的修改,合并到已有分支:
    1)基于当前的修改创建一个临时分支tempbranch
    $ git branch tempbranch hash值 //hash值是游离状态的hash码
    2)切换到某个工作分支
    $ git checkout workbranch
    3)将tempbranch及修改合并到工作分支
    $ git merge tempbranch

2、将A分支的一笔提交合并到另一个B分支

1)获取A分支上的需要合并的那一笔commit-id
$ git log #找到需要合并的id
2)切换到B分支
$ git checkout
3)将A分支上的提交合并到B分支
$ git cherry-pick

3、解决冲突conflict

1)查看存在冲突文件
$ git status
2)手动解决冲突

3)将所有修改过的文件重新加入暂存区
$ git add . //添加之后可以查一下修改git diff .
4)继续合并:$ git cherry-pick --continue
放弃合并:$ git cherry-pick --abort
退出合并:$ git cherry-pick --quit

三. 仓库管理

修改本地仓关联的远程仓

1、查看当前远程仓
$ git remote -v
2、方式一:直接修改
$ git remote set-url origin xxxxx.git
方式二:先删后加
$ git remote rm origin
$ git remote add origin xxxxx.git

常用API

checkout用法

  1. git checkout
    显示工作区相对于版本库修改过的文件。git checkout和git status的区别是git checkout没有显示未跟踪文件(Untracked files:),而git status则显示未跟踪的文件。
  2. git checkout 分支名
    表示切换分支
  3. git checkout -b <新分支名> // 新建并切换至新分支
    Detail:表示以当前分支的当前状态来创建新分支并切换到新分支 -b 表示创建新分支
  4. git checkout -b <新分支名> commitId
    表示以当前分支的commitId提交节点创建新的分支并切换到新分支。此时工作区的内容和切换分之前commitId提交节点的内容一样。
  5. git checkout .
    表示将工作区的所有文件的内容恢复到暂存区的状态。这里暂存区的状态是指暂存区原来的状态,也就是现在要扔掉没有加入到缓存区的所有文件
  6. git checkout filename
    表示将工作区的指定文件的内容恢复到暂存区的状态。这里暂存区的状态是指暂存区原来的状态,也就是现在要扔掉没有加入到缓存区的指定文件
  7. git checkout commitId filename
    表示将工作区和暂存区的指定文件都恢复到指定版本的状态,此时的HEAD指针不变。即就是把工作区的指定文件(filename)修改到指定版本后(也就是扔掉后),再把当前状态的该文件(这里指commitId版本的修改)添加到暂存区,这也就是执行此命令后,就可以直接执行git commit而不需要先执行git add。相当于版本回退吗?
  8. git checkout commitId
    表示以指定的提交节点commitId创建了一个临时性分支,此临时性分支可用于做实验性修改。注意:此时HEAD不位于任何分支上,处于游离状态。更准确的说,此命令是以指定的提交节点创建了一个临时分支,一个临时的HEAD指向了这个临时分支,可以在这个临时分支上修改内容并且提交内容。但从临时分支切换到原有分支或其他分支,这个临时分支就会消失,并且在临时分支上的实验性修改也会消失,不影响原有分支。

你可能感兴趣的:(git,github)