git备忘录

  • 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 切换到分支dev
git checkout dev    切换到分支dev
git 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 <file>       # 从版本库中删除文件
git rm <file> --cached  # 从版本库中删除文件,但不删除文件

git reset <file>    # 从暂存区恢复到工作文件
git reset -- .      # 从暂存区恢复到工作文件
git reset --hard    # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改

git stash list
git 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)推送到远程 master
git 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 路径 搜索"===“,删除后没有恢复的话 说明删除错误了 ->重新删除

<<<<<<< HEAD
Creating 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 PBXFileReference
2.组织结构分类信息, 如PBXGroup
3.项目工程配置信息, 如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 = 413
fatal: The remote end hung up unexpectedly
fatal: 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只要知道了你的公钥,就可以确认只有你自己才能推送。

参考资料:廖雪峰的博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值