仓库

  • git init:会在本地当前目录下创建一个git仓库
  • git clone https://github.com/username/a.git:下载远程库到本地
  • git remote add origin git@server-name:path/repo-name.git:关联一个远程仓库,前提是已经在gitlab上创建了一个仓库
  • git push -u origin master:第一次把本地工程推送到远程仓库,之后直接git push即可

查看日志

  • git log 查看提交历史,可确定回退到哪个版本
  • git log --pretty=oneline 查看提交历史,更好看而已
  • git reflog 查看已执行的命令历史,可确定回退到哪个版本

工作区与缓存区

三种状态+远程库:

工作区与缓存区1

执行 add 添加命令后:

工作区与缓存区1

执行 commit 提交命令后:

工作区与缓存区1

  • 工作区:修改或者新添加一个文件,处于工作区(撤销:git checkout -- fname
  • 暂存区:执行git add fname后,处于暂存区(撤销:git reset HEAD fname
  • 分支:执行git commit -m "desc"后,提交到了分支(撤销:git reset --hard commit_id
  • 远程库:执行git push后,代码就推到了远程库

撤销操作

  • 在工作区修改后,并未add到暂存区:撤销工作区的修改 git checkout -- fname,就回到了和版本号一样的状态
  • 在工作区添加了一行a,并add到缓存区,但没commit到分支上;然后又在工作区添加了一行b,并未add暂存区:执行git checkout -- fname就回到了添加到暂存区后的状态a
  • 在工作区修改后,并add到了暂存区:执行git reset HEAD fname,就把暂存区的修改撤销了,回退到工作区状态;再执行git checkout -- fname就撤销了工作区的修改,回到了和版本库一样的状态
  • 已经commit到了分支上:执行git reset --hard commit_id就撤销了提交,回退到了暂存区状态
  • 撤销merge操作:

    $ git log     // 查看历史版本号(每条历史记录的第一行commit后的是版本号,拷贝前5个字符以上即可)
    $ git reset --hard 【版本号】   // 回滚

示例:

$ git log


commit 8a2b2261128388b3a84bc82aae46d7fbc47510df (HEAD -> lsy-practise, origin/lsy-practise)
Merge: 44950c2 1f16ec9
Author: liushunyun <liushunyun@58.com>
Date:   Tue Aug 13 16:25:46 2019 +0800

    删除拆分前的代码

commit 44950c242585dbc925ed8f0e4da3d96383ecfb22
Author: liushunyun <liushunyun@58.com>
Date:   Sun Aug 11 10:25:28 2019 +0800

    test

commit 1f16ec94f8a5ab42e6b3d03bc6ba27720a3b55c7 (origin/master, origin/HEAD, master)
Merge: 1c56749 6b202fe
Author: root <root@bjm6-19-154.58os.org>
Date:   Fri Aug 9 11:35:34 2019 +0800

    version:4.3.16.0,branchName:20190809112714076_release_9683_etongzhen-sandbox,integrations:upload_img_fix

回滚:

git reset --hard 8a2b22611        // 回滚到最近提交的那次,commit后的是版本号,取前边5个以上的字符即可

删除操作

  • rm fname:从工作区删除,撤销删除:git checkout -- fname
  • git rm fname:从版本库中删除文件,彻底删除:git commit;撤销删除:git reset HEAD fname,再git checkout -- b即可完全恢复
  • git checkout -- fname:把误删的文件恢复到最新版本,其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”

分支管理

  • git branch dev:创建dev分支
  • git checkout dev:切换到dev分支
  • git checkout -b dev:创建并切换到dev分支(从当前分支复制出dev新分支,注意push后再切换其他分支)
  • git branch:查看所有分支和当前分支
  • git checkout -- fname注意:是撤销工作区的修改
  • git merge dev:把dev分支合并到当前分支(如当前是master分支)
  • git branch -d dev:删除dev分支
  • git push --set-upstream origin dev:把本地分支push到远程仓库
  • git checkout -b 本地分支名 origin/远程分支名:从远程仓库拉取一条本地不存在的分支

    从当前分支拉新分支开发:

    1. 假设需要从当前的master分支创建新分支的dev2进行开发:
    git checkout -b dev2
  1. 把新分支dev2push到远程
git push origin dev2
  1. 拉取远程分支dev2
git pull
  1. 提示:

    There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details.
    
    git pull <remote> <branch>
    
    If you wish to set tracking information for this branch you can do so with:
    
    git branch --set-upstream-to=origin/<branch> dev2
    
    经过验证,当前的分支并没有和本地分支关联,根据提示进行下一步:
  2. 关联

    git branch --set-upstream-to=origin/dev2
  3. 再次拉取 验证

    git pull

把远程仓库中的dev2分支拉到本地(本地之前没有该分支)

git checkout -b dev2 origin/dev2

如果成功,就会在本地自动创建新分支dev2,并自动切换奥分支dev2

如果拉取不成功,需要执行 git fetch ;然后再执行上面的命令

参考:git从已有分支拉新分支开发

注意:在分支上修改并commit后,当切换到master分支后是看不到,必须合并分支后才可以。

查看本地项目git配置信息

  • config 配置有system级别 global(用户级别) 和local(当前仓库)三个
  • 设置先从system -》global -》local 底层配置会覆盖顶层配置 分别使system/global/local 可以定位到配置文件

示例:

- 查看系统config:`git config --system --list`
- 查看当前用户(global)配置:`git config --global --list`
- 查看当前仓库配置:`git config --local --list`

查看当前仓库的用户名、邮箱:

git config user.name
git config user.email

配置当前仓库的用户名、邮箱:

git config --local user.name zhangsan
git config --local user.email zhang@126.com

远程仓库

  • 查看本地git项目对应的远程github路径:git remote -v 即远程git的服务器地址
  • 查看本地git项目是从github的哪个分支上拉下来的:git remote show origin

子模块

  • git submodule ...

参考:https://www.liaoxuefeng.com/w...
参考:https://git-scm.com/book/zh/v...

git取消文件跟踪

参考:https://www.cnblogs.com/zhuch...


Nooboy
28 声望3 粉丝

请叫我“菜鸟小子”