博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
git备忘录
阅读量:7073 次
发布时间:2019-06-28

本文共 4949 字,大约阅读时间需要 16 分钟。

  • SVN: 集中式的版本控制系统. 本地只有文件,没有版本库,所有的代码只在服务器上有版本记录,如果要进行版本的回退,和一些tag操作,必须经过服务器

  • Git: 分布式版本控制系统,每个人电脑就有版本库.写完代码,先提交到本地的版本,让后提交到服务器上,最后每个电脑都有一个最新的代码

    git也要配置服务器, 但是服务器的作用, 只是作为一个中间桥梁供开发人员去同步代码用的.  git有机器强大的分支管理,把SVN等远远抛在了后面复制代码

1.远程仓库

  • 1.1 创建SSH Key. 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。使用以下命令创建SSH Key:(替换成你的邮箱地址).

    $ ssh-keygen -t rsa -C "youremail@example.com"复制代码
  • 1.2 在用户主目录中找到.ssh目录,里面有id_rsa(私钥)和id_rea.pub(公钥),打开id_rea.pub并记录下来.

  • 1.3 登录GitHub,打开"Account settings","SSH Key"页面,添加Key,把id_rea.pub内容添加进去.

    git需要在GitHup,OsChina,GitLabel中添加自己的公钥  由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,GitHub只要知道了你的公钥,就可以在每台电脑上往GitHub推送了.复制代码
  • 1.4 添加远程库 在GitHub上创建仓库,使用下面命令,把这个远程的仓库与本地已有的仓库进行关联,之后就可以把本地仓库的内容推送到GitHub仓库了,注意是SSH的,传输相比http稳定

    cd 到本地文件		  $ git remote add origin git@github.com:WayThought/blog.git    git remote  查看远程库的信息  $ git remote origin或者,用git remote -v显示更详细的信息复制代码
  • 1.5 从远程库克隆(当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。)

    cd 到本地文件		  $ git clone git@github.com:WayThought/blog.git复制代码

这样就把远程的仓库克隆到了本地

2.本地分支管理

git status: 查看文件的状态

git add : 提交有修改的文件,由工作区到暂存区

git add 文件名  添加指定修改的文件到暂存区git add .  添加当前目录所有有修改的文件到暂存区复制代码

git commit : 提交暂存区的文件到本地版本库

git commit -m "注释" 文件名  提交指定的文件到本地仓库git commit -m "注释"        提交所有的文件到本地仓库复制代码

(需要提交的改动文件,必须先add加到缓存区,再commit到版本区)

git pull和push命令是本地仓库和远程仓库(服务器)打交道的,一般在push之前都会先pull下代码,如果有冲突,解决完冲突再push

git pull 从服务器上更新代码到本地仓库,切换到本地需要提交的分支(dev)git pull origin dev  把服务器远程仓库更新的代码拉到本地仓库git push origin dev  把本地仓库的代码更新推送到服务器上复制代码

创建与合并分支(当前分支为master)

git branch  查看当前分支git branch dev origin/dev 切换到分支devgit checkout dev    切换到分支devgit checkout -b dev   创建dev分支,然后切换到dev分支git merge dev  把dev的工作内容合并到master上(分支A合并分支B,与分支B合并分支A是一样的)复制代码

3.版本回退※

git log  显示历史记录(写周报或者查看版本号)git reflog 来记录你的每一次命令(版本回退后,可以找到上一个版本的commit id )git reset --hard HEAD^ 回退到上一个版本git reset --hard HEAD^^ 回退到上上个版本git reset --hard HEAD 版本号 回退到指定的版本注: 如何找回删除的分支	3.1 通过git reflog 命令找到我们需要恢复的信息对应的commit_id (根据log 提交的日期时间)	3.2 通过git branch 新分支名字 对应的commit_id 来建立一个新的分支,吧丢失的东西恢复到新分支上	如何临时修复bug	git stash 把工作区的内容暂时隐藏	git stash pop 把工作区的内容显示到当前分支复制代码

4.补充:

4.1 常用命令:※

git config user.name 查看用户名git config user.email 查看邮箱地址git config --global user.name "Your Name"  提交名字git config --global user.email you@example.com  提交邮箱git rm 
# 从版本库中删除文件git rm
--cached # 从版本库中删除文件,但不删除文件git reset
# 从暂存区恢复到工作文件git reset -- . # 从暂存区恢复到工作文件git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改git stash listgit stash pop 恢复的同时把stash内容也删了git checkout -- readme.txt意思就是,把readme.txt文件在工作区的修改全部撤销git checkout -- . 把工作区的修改全部撤销git reset HEAD filepathname 来放弃指定文件的暂存区内容git reset HEAD . 放弃所有暂存区内容(head相同的两个分支)未add和commit的内容如果checkout另一个分支会带过去 可以来回切换复制代码

4.2 常见问题:

4.2.1 git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的链接,根据提示,设置dev和origin/dev的链接:

$ git branch --set-upstream dev origin/dev复制代码

4.2.2 将本地项目添加到远程的仓库 ※

1.远程建立仓库,并克隆到本地(例如:storeHouse)2.将本地的项目拷贝到storeHouse文件中3.使用 git init 命令4.使用 $ git remote add origin git@github.com:WayThought/blog.git 5. git add . 6. git commit 7. git push 复制代码

4.2.3 将本地分支推送到远程分支:(如果远程分支不存在则会自动创建分支) git push origin 本地分支名:远程分支名 4.2.4 远程分支版本的回退

切换到本地分支对应着的远程分支git push origin HEAD --force #远程提交回退复制代码

4.2.5 删除远程分支

git push origin \-\-delete 远程分支名复制代码

4.2.6 强制覆盖分支 ※

把本地的 develop 分支强制(-f)推送到远程 mastergit push origin develop:master -f复制代码

4.3 补充: 查看本地分支与远端分支的差异: git diff master..远程仓库名字/master

git tag 标签名 commitId 添加tag git push origin 标签名 将本地tag推到远程

git tag -d 标签名 删除本地tag git push origin --delete 标签名 删除远程tag

5.0冲突

5.1常见冲突:

第一种: 项目可以打开,报错->直接去找,对别人的改动要进行沟通决定是否要保留第二种: 项目打开失败git status 查看哪个文件冲突(一般是配置文件)open 路径 搜索"===“,删除后没有恢复的话 说明删除错误了 ->重新删除<<<<<<< HEADCreating a new branch is quick & simple.=======Creating a new branch is quick AND simple.>>>>>>> feature1复制代码

上面那个是HEAD分支的,下面这个是feature1分支,沟通后决定保留或删除

5.2 pbxproj文件冲突

比较麻烦的一种冲突,企业开发经常会遇到project.pbxproj文件冲突的问题,project.pbxproj文件主要包含了以下几项主要信息:

1.工程文件关联信息, 如PBXBuildFile PBXFileReference2.组织结构分类信息, 如PBXGroup3.项目工程配置信息, 如XCBuildConfiguration XCConfigurationList复制代码

解决办法:

1.笨办法

笨方法1: 由于删除自己的修改的部分还是没有办法打开工程,所以要将上一个版本的project.pbxproj文件导出来,替换掉现有的project.pbxproj文件,但是添加到工程中的文件不见了,后来其实在工程里面看不到了而已,在对应文件目录还是能找到的,只要将这些文件拖一遍到工程里就ok了,(注意看下工程的Compile Sources,有时候会不显示添加的类)

笨方法2: 将project.pbxproj文件文件中一个版本的的冲突都删除掉,根据编译报的错误去添加对应的类(注意不要重复添加),在对应文件目录还是能找到的,只要将这些文件拖一遍到工程里就ok了

2.预防:需要增加文件时先增加完空文件后立刻check一次,让别人每次改动 pbxproj的时候改动之前check一次,保证有交叉时间是可能性最小

3.将不同分支导致的对象进行重新排序,先排序冲突里面相同的对象,然后是重命名或移动了的对象,最后是两边各自新增的对象,(根据sourceCode进行排序)

5.3 git push 报以下错误:

错误error: RPC failed; result=22, HTTP code = 413fatal: The remote end hung up unexpectedlyfatal: The remote end hung up unexpectedly解决:第一种. 将http切换成ssh,在git的config中修改url( changed it to the SSH address, and everything resumed working flawlessly)第二种. 继续使用http,运行	git config http.postBuffer 524288000第三种。 git push -u origin 分支(这种没有亲自尝试过,可以试试)复制代码

6.0 为什么GitHub需要SSH Key呢

因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

参考资料:

转载地址:http://zmuml.baihongyu.com/

你可能感兴趣的文章
Enterprise Library Step By Step系列(十五):配置应用程序块——设计篇
查看>>
根据要素选择集,创建新图层
查看>>
Android Framework 记录之二
查看>>
Hadoop集群(第10期)_MySQL关系数据库
查看>>
AE与AO的区别
查看>>
隐马尔可夫模型(四)——隐马尔可夫模型的评估问题(后向算法)
查看>>
Javascript语法基础
查看>>
设计模式(十五):Iterator迭代器模式 -- 行为型模式
查看>>
A.2.3-猜数字游戏
查看>>
[LeetCode] Flatten 2D Vector 压平二维向量
查看>>
反射:InvokeMethod 活动调用多种方法的方法配置要点
查看>>
Asp.net缓存简介
查看>>
6410键盘应用程序的开发
查看>>
dwz(jui)刷新当前dialog的方法
查看>>
小型软件项目开发流程探讨
查看>>
[Step By Step]SAP HANA创建属性视图(Attribute View)
查看>>
[TLSR8266] 1、搭建tlsr8266编译框架在win服务器中
查看>>
[Spark][Python]DataFrame中取出有限个记录的例子
查看>>
数据结构中的各种排序方法-JS实现
查看>>
OpenGL ES 之对各种坐标系统的记录理解
查看>>