工作中常用的git命令及场景

1,174 阅读4分钟

1 创建git项目

远程仓库创建项目

gitlib/github 创建项目,本地通过 http/ssh 两种地址拉取代码 + git clone http地址 提供本人邮箱给仓库管理员,创建账号并添加相应权限 + ssh clone ssh地址 + mac 生成ssh 使用ssh拉取代码 + win 生成ssh 使用ssh拉取代码

将本地已有项目推送至远端仓库

    完整流程:
    $ cd yourproject
    $ git init 
    $ git remote add origin gitUrl地址
    $ git add .
    $ git commit -m 'init project'
    $ git push -u origin master
上述操作解析

   进入项目
   $ cd yourproject

   (关键步骤1)=> 初始化git项目
   $ git init 

   (关键步骤2)=>远端仓库建立连接
   $ git remote add origin gitUrl地址  

   $ git add .
   $ git commit -m 'init peoject'

   (关键步骤3)=>首次提交到远端仓库
   首次提交远端仓库需在 origin 前边添加 -u
   $ git push -u origin master

   如果此步骤提交报错 根据终端提示添加 -f 参数 即:
   $ git push -u origin master -f

扩展部分-一个本地项目关联多个远程仓库

多次、分别提交各自远端仓库

   远程地址A:'giturlA'       //默认 'origin'
   远程地址B:'giturlB'       //默认 'originB' 这里的名字 'originB'

   (关键步骤2)=>操作追加远程地址B

   $ git remote add origin giturlA 
   $ git remote add originB giturlB

   $ git remote -v
   查看本地对应的远程仓库

   (关键步骤3)=>操作追加远程推送B
   $ git  push origin master:master
   $ git  push originB master:master

也可一次提交多个远端仓库

删除远程关联

   取消本地目录下关联的远程库:
   $ git remote remove origin   // origin默认名字,根据自己仓库情况更改

2 拉取/提交代码(团队合作,uat分支/sit测试分支/同事分支/bug分支=>多分支情况下)

  • 拉取代码(只拉取自己的分支)
    $ git pull origin your_branch_name
  • 提交代码 (只推送自己的分支)
    $ git push origin your_branch_name

3 git 分支命令

查看本地分支

    $ git branch
    终端显示:
    * br-2.1.2.2
      master

查看远端分支

    $ git branch -r
    终端显示:
    * br-2.1.2.2
      master
      remotes/origin/HEAD -> origin/master
      remotes/origin/br-2.1.2.1
      remotes/origin/br-2.1.2.2
      remotes/origin/br-2.1.3
      remotes/origin/master

查看所有分支

    $ git branch -a
    终端显示:
    * br-2.1.2.2
      master
      remotes/origin/HEAD -> origin/master
      remotes/origin/br-2.1.2.1
      remotes/origin/br-2.1.2.2
      remotes/origin/br-2.1.3
      remotes/origin/master

切换分支

    $ git branch develop origin/develop
    $ git checkout -b develop origin/develop 

本地创建分支并于远端关联

  • 步骤1 本地创建分支
    $ git checkout -b new-branch
    查看一下现在的分支状态:
    $ git branch

    终端显示:
    * new-branch
      master
      release
      星号(*)表示当前所在分支。现在的状态是成功创建的新的分支并且已经切换到新分支上。
  • 步骤2 本地分支推送至远程分支
    $ git push origin 本地分支名:远程分支名
    这里以 new-branch 为例
    $ git push origin new-branch:new-branch
  • 步骤3 将本地与远程分支关联
    $ git branch --set-upstream-to=origin/remote_branch your_branch

    remote_branch 远程分支名 | your_branch 本地分支名
    比如dev关联:
    $ git branch --set-upstream-to=origin/dev dev

查看本地分支与远程分支连接状态

    $ git branch -vv
    
    默认分支指向 
	origin/HEAD -> origin/master
    可删除 git remote set-head origin -d
    

删除远程分支

    $ git push origin :new-branch
    or
    $ git push origin --delete new-branch

删除本地分支

    $ git branch -D new-branch

github/gitlab创建了分支本地看不到,解决方案

    $ git checkout master        //首先切到master分支

    $ git pull //同步下master   // 或者 git fetch --all

    $ git branch -a             //查看所有本地查库分支

git删除远程分支,本地仍可以看到

    $ git branch -a
  • 命令可以查看所有本地分支和远程分支,发现很多在远程仓库已经删除的分支在本地依然可以看到。
    $ git remote show origin
  • 可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息。

    此时我们可以看到哪些远程仓库已经不存在的分支

    $ git remote prune origin
  • 这样就能成功在本地删除远程不存在的分支

4 撤回操作

撤回 git add . 操作

    $ git reset HEAD    //上一次add 里面的全部撤销了
    单文件操作
    $ git reset HEAD XXX/XXX/XXX.js  // 对某个文件进行撤销

撤回git commit 操作

    $ git reset --mixed HEAD^     // 撤销了commit,写的代码仍然保留(常用)

    $ git reset --hard sdlfkjsdlfwe

    注意:
      HEAD^ 的意思是上一个版本,也可以写成HEAD~1
      如果你进行了2commit,想都撤回,可以使用HEAD~2

    参数说明:
      --mixed
      意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
      这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

      --soft 
      不删除工作空间改动代码,撤销commit,不撤销git add .

      --hard
      删除工作空间改动代码,撤销commit,撤销git add .

      '注意完成这个操作后,就恢复到了撤退版本的commit状态,之后的commit记录也会消失'

撤回git push 操作

     $ git revert HEAD^ 
     $ git revert sdlfkjsdlfwe

     新增一条新的commit,它和倒数第三次提交的(最后正确提交的一次)相同,
     与倒数第一次('提交错误那次操作相反,抵消错误的那次')达到撤销效果

	'revert 与 reset 最主要的区别:
    revert 只是被「反转」了,并没有在历史中消失掉,你的历史中会存在两条commit:
		(一个原始 commit ,一个对它的反转 commit。)'
    git reset会删除commit的记录

5 暂存使用

开发需求时,突然来一个紧急BUG修复任务,使用暂存:

   添加缓存栈:git stash
   查看缓存栈:git stash list
   推出缓存栈:git stash pop
   取出特定缓存内容:git stash apply stash@{1}

   '未被add. 添加的文件使用stash: git stash -u'

   '注意':没有被 track 的文件(即从来没有被 add 过的文件不会被 stash 起来,
   因为 Git 会忽略它们。如果想把这些文件也一起 stash,
   可以加上 -u 参数,它是 --include-untracked 的简写。就像这样:git stash -u
   

6 git修改注释

   $ git commit --amend
   // commit注释写错了,只是想改一下注释
   此时会进入默认vim编辑器,修改注释完毕后保存就好了。

7 git 用户名密码

   // 设置查看 git 用户名和邮箱
   git config list
   git config user.name   --查看git当前配置用户名
   git config user.email  --查看git当前配置的邮箱
   git config user.name 名称 设置用户名
   git config user.email 邮箱 设置git邮箱

   全局命令设置
   git config  --global user.name 你的目标用户名;
   git config  --global user.email 你的目标邮箱名;

   在项目中也可以查看这些信息
   vi ~/.gitconfig;

8 git 提交规范

    这里只列举我常用的提交格式类型
    feat:新功能(feature)
    fix:修补bug
    docs:文档(documentation)
    style:格式(不影响代码运行的变动)
    refactor:重构(即不是新增功能,也不是修改bug的代码变动)
    test:增加测试
    chore:其他修改,比如构建过程或辅助工具的变动

持续更新 TODO...