Git日常基本使用不完全指南

一.常用命令

  • git init 初始化一个本地仓库,会在当前文件夹下生成一个.git 文件包
  • git add ./<file> 提交本地内容到暂缓区,.表示全部提交,file表示提交的文件名
  • git commit -m"xxxx" 将暂缓区内容提交到本地仓库并进行备注
  • git status 查看本地内容状态
  • git reset --hard HEAD^ 本地回退到上一个版本
  • git reset --hard 版本号 本地回退到具体的版本
  • git log 查看提交的 commit 版本日志,但查看不到回退过的版本记录,即 commit 后回退了,该次 commit 记录查看不到
  • git reflog 查看所有的版本操作日志,方便查看每个操作步骤所在的版本,可以根据版本号自由前进后退
  • git checkout -- <file> 撤销在工作区的修改,回到和版本库一样的状态
  • git branch 分支名 创建分支
  • git branch 查看本地分支情况
  • git checkout 分支名 切换分支
  • git checkout -b 分支名 创建并切换分支
  • git merge 分支名 合并某分支到当前分支
  • git stash 把工作现成隐藏暂存起来
  • git stash pop 恢复隐藏暂存的内容
  • git remote add origin 远程仓库地址 将远程仓库和本地仓库进行关联
  • git remote -v 查看本地仓库对应的远程仓库
  • git clone 远程仓库地址 将远程仓库内容克隆到本地
  • git pull
  • git push origin 分支名 将本地分支推送到远程,远程仓库就创建了该分支
  • git checkout -b dev origin/dev 将远程 dev 分支拉取到本地,并在本地创建 dev 分支和远程 dev 分支进行关联
  • git branch -vv 查看本地分支和远程分支的关联关系
  • git checkout --track origin/dev 将远程分支关联到本地并创建同名分支,并自动追踪远程同名分支
  • git merge --abort 取消合并代码

二.从零开始搭建项目仓库

在项目开发中,为了代码安全和方便多人协作开发,我们通常会使用代码托管工具对代码进行管理。在这里我们使用 Github 作为远程代码共享库。下面我们就从零开始搭建一个远程仓库,并和本地 GIT 仓库进行关联。具体步骤如下:

1. 创建 SSH Key

因为本地的 Git 仓库和远程 Github 仓库之间是通过 SSH 加密进行传输的,因此需要先设置 SSH Key。
设置 SSH Key 步骤:

  • 1.1 在 C 盘用户(USER)目录下找到.ssh文件夹,查看是否有id_rsaid_rsa.pub这两个文件;
  • 1.2 如果没有,执行ssh-keygen -t rsa -C "xxxxx@qq.com" 一路回车生成公钥和私钥文件,id_rsa是私钥,id_rsa.pub是公钥;

2. 登录 Github,设置 SSH Key

  • 2.1 登录 GIthub,以此选择Setting - SSH and GPG keys, 然后选New SSH key按钮
  • 2.2 填写任意 title(尽量有意义),将第一步生成文件id_rsa.pub中的内容复制进 Key 中,添加即可。

3. 在 Github 中创建一个远程仓库

在 Github 右上角找到+号,选择new repository,填写相关信息后创建仓库,至此,远程仓库就创建完毕了。

4. 将远程仓库和本地仓库进行关联,并将本地代码推送到远程仓库

将远程仓库和本地仓库进行关联分两种情况:
4.1 本地仓库还未创建
此时,只需要在本地项目文件夹中使用git clone 远程仓库项目地址 将远程仓库克隆到本地,因为此时远程仓库时空的,克隆下拉只有一个.git文件夹.这样就把本地仓库和远程仓库进行关联了,就可以在本地写项目代码。
4.2 本地仓库已创建

  • 001 初始化本地仓库
    git init
  • 002 将本地仓库和远程仓库进行关联
    git remote add origin 远程仓库项目地址
  • 003 将本地代码添加到暂缓区
    git add .
  • 004 将暂缓区代码上传到本地仓库
    git commit -m"xxxxx"
  • 005 将本地仓库代码推送到远程仓库
    git push -u origin master

    使用git push -u origin master 就可以将本地仓库推送到远程仓库,注意因为初始状态时远程仓库时空的,加上-u, git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令.

注意:通常执行 005 后会报错,因为本地分支版本低于远程,因此需要更新。需要执行:git pull --rebase origin master ,然后再执行 005 就成功了。

三.场景处理

1、在当前版本更新了内容,需要放弃文件修改

① 未 add 到暂缓区之前

  • 放弃部分文件修改
      git checkout -- 文件名
    
  • 放弃全部文件修改
      git checkout .
    
    ps: 在切换分支的时候如果遇到切换到新分支后很多文件被修改,可以使用该方法放弃修改。

② 已经 add 到了暂缓区

  • 放弃部分文件修改
      git reset HEAD 文件名
    
  • 放弃全部文件修改
      git reset HEAD .
    
    ③ 已经 commit 到了暂缓区
  • 回退版本
      git reset --hard HEAD^  // 连add也一起撤销
      git reset --soft HEAD^  // 只撤销commit,不撤销add
    
  • 本地回退后强制更新远程
  git push -f origin xxx

2、在当前工作的分支上正在工作,但工作没做完无法提交,突然后紧急 bug 需要修复,该如何处理

  • 情景描述:

    因为是紧急任务,而当前分支的工作也短时间内无法完成,因此无法在当前分支进行处理,需要重开新的分支单独处理 bug 问题。

  • 解决办法:

    使用git stash命令先将当前任务暂存起来,然后当然分支就是干净了,就可以切换新的分支,当把新的分支 bug 修复完提交以后,就可以切换回这个分支,在使用git stash pop命令将暂存内容恢复,然后继续处理当前任务。

3、新建dev分支,将master代码拷贝到dev分支,在dev分支进行开发。具体步骤如下:

1)、新建本地dev分支并切换至dev分支

git checkout -b dev

2)、将本地master代码合并到dev分支

git merge master

3)、将本地dev分支推送到远程,并在远程创建dev分支

git push origin dev

此时,远程dev分支创建成功,代码也同步成功。

4、删除分支

  • 删除本地dev分支
git branch -d dev
  • 删除远程dev分支
git push origin --delete dev 或 git push origin -d dev
  • 删除全部远程已经删除过的本地分支
git remote prune origin

5、本地其他开发者远程拉取dev分支,并切换至dev分支

1)、 将远程分支信息拉取到本地

git fetch
  • 如果远程仓库没有的分支,但是本地remotes中看到还有,可以使用如下命令清除:
 git remote prune origin
  • 如果远程仓库存在的dev分支,git fetch之后在remotes中可以看到,本地没有,可以使用如下命令同步:
git checkout -b dev origin/dev

2)、查看远程所有分支信息

git branch -a

3)、切换分支

git checkout dev

6、已提交至远程的代码发现有问题需要回退到上一个版本

1)、本地回退

git reset --hard HEAD^

2)、推送远程

git push -f

7、版本上线前打 tag

1)、新建 tag
切换至对应的上线分支:

git tag -a web_1.4.0.20201127_beta -m"更新需求"

2)、推送 tag 至远程仓库

git push origin web_1.4.0.20201127_beta

3)、查看所有 tag

git tag --list

4)、删除 tag

// 删除本地
git tag -d web_1.4.0.20201127_beta
// 删除远程
git push origin :refs/tags/web_1.4.0.20201127_beta

5)、解决tag推送报错
在用repo管理代码时遇到了error: src refspec XXX matches more than one 这样的错误,一个是在 删除一个远程的tag时遇到的,
一个是在将一个tag push到服务器时遇到的,两个错误的提示是完全一样的。遇到这样的问题该怎么解决,经过研究后找到了
解决的方法,下面就将解决的方法和大家分享!
第一种情况,删除远程branch时遇到这种情况的解决方法:
比如删除服务器上的testtag 这个tag时,输入如下命令

git push origin :testtag

提示 `error: src refspec XXX matches more than one
error: failed to push some refs to 'git@xxx:android/text.git'
出现这个错误的原因是在服务器上有个tag的分支是testtag这个名 有个branch的分支也是这个名,
也就是说tag分支和branch分支同名了,在执行 git push origin :testtag这个命令时不知道是删除那个
所以会提示错误。解决办法:

git push origin :refs/tags/testtag

这就是明确告诉服务器删除的tag的分支,
删除branch分支

git push origin :refs/heads/testtag

第二种情况,将一个tag分支push到服务器时遇到这种情况的解决方法:
还那testtag这个tag分支为例,将tag分支push到服务器

git push origin testtag

提示: `error: src refspec XXX matches more than one
error: failed to push some refs to 'git@xxx:android/text.git'
出现这个错误主要是因为本地也有个branch的分支名为testtag,这样在push时不知道是将branch的分支push到
服务器还是将tag的分支push到服务器,如果是将tag分支push到服务器,那就将branch的分支删掉,如果是将
branch的分支push到服务器就将tag的分支删掉。
删除branch分支的方法:
git branch -D testtag
删除tag分支的方法:
git tag -d testtag

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

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,645评论 9 163
  • 声明:这篇文章来源于廖雪峰老师的官方网站,我仅仅是作为学习之用 Git简介 Git是什么? Git是目前世界上最先...
    横渡阅读 3,946评论 3 27
  • (预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料) 一:Git是什么? Git是目前世界上最先进的...
    axiaochao阅读 1,927评论 1 8
  • 原文地址主要用到的命令: git config user.name 设置用户名 git config user....
    AFinalStone阅读 465评论 0 2
  • 转载自:http://www.open-open.com/lib/view/open1414396787325.h...
    Bbooo阅读 410评论 0 3