#git的使用
git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是一个开源的分布式版本控制系统,用以有效、高速的 处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。这里附上一个不错的学习git的网站 git 使用手册
一、配置git环境
1.打开终端, 直接输入, 先检查系统是否已经存在SSH key
2.不存在的话 创建一个新的SSH key, 这里一般使用的都是邮箱, 比如你的gitHub的邮箱呀什么的。
这里输入的过程中可能提示输入一个类似于密码的自定义的通行证号,如果直接回车则为空, 可能也会要你输入将要保存的路径,直接回车默认为当前路径。
3.创建成功之后, 在执行命令1拿到SSH key, 复制一下
如图一长串的东西就是SSH Key
一定要记得复制的时候包括
ssh-rsa
4.将SSH key输入到GitHub网站中(以将远程仓库建立在gitHub中为例)
如图设置一个标题, 然后把之前复制的一串东西粘贴进去就是了
5.测试是否能够正确链接到github中,输入以下命令:
将会显示一下信息
输入yes后,显示出下列信息表示连接成功
二、配置git个人信息
1.设置用户名和邮箱
//配置名字
//配置邮箱
//配置完以后检查配置是否正确
Git通过检测用户名和邮箱来跟踪进行commit的用户, 所以需要配置一下, 以区分不同用户的提交信息, 一般都是多人开发嘛
三、新建一个git仓库的方法
1.使用xcode自带的方法创建
打开Xcode,创建一个新的工程
选择下一步,在项目名中输入你要创建的项目的名字
点击下一步,也就是最后一个步骤,在这里先选择一个要保持工程的目录,然后在窗口底部选上Create git repository on (My Mac )
2.手动创建一个分支的方法
- cd 你要创建的文件夹路径
- git init
你会看到文件夹下有这样一个文件
到这里你就完成了一个git仓库的建立。
四、将git仓库推送到远程
1、添加远程服务器
2、将你的项目文件夹直接拖到SourceTree里面
图中GitDemo所示
3、直接在图形化界面里面操作就是了, 第一步可以直接push, 将工程文件推送到服务器上面。
五、Xcode中的显示
既然说到git主要用在代码的版本控制上, 那肯定与开发工具有着紧密的联系, 下面就来看一下, xcode上与git是怎么联系的
常用的操作选项就是上面标出的地方。
这里是去掉(回退)git操作记录的选项。
六、git常用命令
虽然有SourceTree这样好用的图形化界面工具, 但是有些操作是它无法完成的, 或者说在上面操作容易出错的。下面介绍一下git操作常用的命令。
远程仓库相关命令
1. 克隆一份代码到本地
|
|
|
|
克隆到本地之后, 以后就不用每次都用cd定位文件夹了, 可以直接在SourceTree上定位到当前仓库(SourceTree右上角的Terminal选项)
2. 查看远程仓库
|
|
3. 添加远程仓库
|
|
4. 删除远程仓库
|
|
5. 拉取远程仓库
|
|
6. 推送远程仓库
|
|
github push错误:403 Forbidden
|
|
解决方案:
修改
再次git push,弹出框输入密码,即可提交
7. 添加某台电脑上的某个文件夹当做远程服务器
|
|
使用这个命令是为了给当前仓库添加一个远程服务器, 所以, 你首先必须有一个本地的仓库。
结果如下
分支(branch)操作相关命令
1. 查看本地分支
|
|
2. 查看远程分支
|
|
3. 创建本地分支
|
|
4. 切换分支
|
|
5. 创建新分支并立即切换到新分支
|
|
6. 删除分支
|
|
7. 合并分支
|
|
8. 创建远程分支(本地分支push到远程)
|
|
9. 删除远程分支
方式一:
方式二:
ignore文件操作
查看忽略文件
修改忽略文件
1.对已经提交过的文件执行ignore
如果出现已经 commit 过的文件无法被忽略,那么需要执行:
|
|
之后提交推送,此后 .gitignore 才会对此文件生效。原因是 .gitignore 只会对没有被 git 记录过的文件生效,也就是 untracked file。
2.对未commit的文件执行ignore
直接执行上面的修改忽略文件就可以。
回退代码相关操作
1. 回退代码到某个版本, 保留吐出的代码
|
|
2. 回退代码到某个版本, 不保留吐出的代码
|
|
3. 回滚之前提交的某个点, 生成一个新的提交点
|
|
如果这个点是之前merge
的点,Git
会抱怨:
这是因为你revert
的那个commit
是一个merge commit
,它有两个parent
, Git
不知道base
是选哪个parent
,就没法diff
,所以就抱怨了,所以你要显示告诉Git
用哪一个parent
。
一般来说,如果你在master
上merge
develop,那么parent 1
就是master
,parent 2
就是develop
.
所以你需要执行这样的revert
命令:
此时使用下面命令可以详细查看相应的父分支的点:
revert
点g的前后效果图:
|
|
其中G
是撤销 g
生成的 commit
。通过 git show G
之后,我们会发现 G
是一个常规提交,内容就是撤销 merge
时被丢弃的那条线索的所有commit
的「反操作」的合集。
4. 取消某次merge的内容
|
|
分支编辑
1. 如果当前分支既有未从远程pull下来的代码, 又有本地已经commit的代码, 即分支上出现一上一下箭头, 采用如下命令
|
|
rebase的原理相当于三步:
1. 将我们的分支退回到上次和服务器同步时的状态 即 reset 2. 将reset之后的代码Stash一份 3. 与服务器进行同步,同步之后再将原来的Stash的代码吐出来和与服务器同步之后的代码进行合并
这样就不会造成下面的出现拐角的分支(也就是说我们在进行push的时候发现服务器里面有新代码,这时候不要执行pull命令。而是执行rebase命令则会将分支成一条直线)
2. 想在某条分支上移动某个分支
|
|
例如有一条分支develop,topic是从develop上拉出来的分支,这时候我想把topic分支从E点移动到F点,那要怎么操作呢?
- 第一步:先将分支切到F点,暂且叫做temp分支。
- 使用命令
git rebase temp topic
.此时topic分支会被移动到F点,且分支已被切换到topic分支,但是此时topic分支可能显示不正常有上下箭头,这是因为切换的这个topic分支已经不是原来的topic分支了,git创建了一个全新的分支并命名为topic,所以此时需要把远程的topic分支删掉,然后将本地的topic分支push到远程,则万事大吉了。
执行之后会得到如下的结果:
3. 想将某条分支上拉出的分支移动到另一个分支的某个点
|
|
例如有一条分支develop,从develop上拉出了一条分支topicA,从topicA分支上拉出了一条分支topicB,此时如果我想将topicB分支移动到develop上的C点怎么操作呢?
- 第一步:先将分支切到C点,暂且叫做temp分支。
- 使用命令
git rebase --onto temp topicA topicB
。
意思就是将目前存在于topicA上的分支topicB移动到temp分支上,也就是移动到develop分支上的C点。 - 合并过程中如果有冲突则会立马停止,这时候要去解决冲突,解决完冲突之后使用命令
rebase --continue
继续分支分编辑操作。
注意
一定要注意,如果分支像下面这样,
此时想要将topicB分支移动到develop上的C点,就不能直接那么干了,不然你会发现坑大了,如果你还是按上面的操作,你会发现分支变成了下面这样:
为什么会这样呢?
推测:git rebase --onto temp topicA topicB
这个命令可能是把topicA从topicB分支上的起始点开始到终点(露头的点),也就是包含topicB上的几个点。
NOTE
对于想要使用git rebase --onto temp topicA topicB
该命令一定是露头的分支,不能是起始点在某个分支上,同时该分支也被merge到了该分支上。如果是这样的就需要先把该分支已经merge的点退掉,将需要迁移的分支漏出来,再进行编辑。(怀疑如果是merge到了其他分支上应该是没问题的,这个没试过,暂不确定)
参考:
git-rebase - Reapply commits on top of another base tip
其他操作
1. 想要对之前已经进行过git ignore操作的文件再次添加进git管理中, 执行如下操作
|
|
2. 强制push某个点到远程
|
|
此命令小心使用
3. 第一次将从某个分支拉出来的分支合到这个分支上的时候, 容易出现拉成直线的情况, 这时候要执行下面的操作
|
|
这句命令的意思就是:(假设目前在develop分支上) 这是第一次merge, 我想要把 货基转股基_4.90.01 分支merge到develop分支上。
--no-ff
参数,表示禁用Fast forward
, 因为本次合并要创建一个新的commit,所以加上-m
参数,把commit描述写进去。
这里还有一种简单的方法, 直接在界面操作
第一次merge的时候只要打上这个勾勾就可以了。
4. 删除本地SourceTree中远程分支目录里面已经被删除的分支
|
|
它的意思就是在fetch之后删除掉没有与远程分支对应的本地分支。
5. 重命名远程分支
在git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再重新提交一个远程分支。
6. 从Git仓库中恢复已删除的分支或丢失的commit
使用这条命令的前提是你曾经将这个点提交过或者push过
7. 关于vim窗口的使用
开始用git commit 提交的时候是用 -m “message”的
后来直接用git commit 回车后弹出一个窗口,后来才知道是linux下的文本编辑器
郁闷的是半天退出不出来,baidu,google一番,
进入之后是VIM的普通模式,按 i 键,进入INSERT模式,这是可以输入message了。
输入完成之后,按ESC键进入命令模式 ,输入冒号(在窗口下面显示),然后输入x,回车就OK了。
8. 解决github push错误The requested URL returned error: 403 Forbidden while accessing
cd到你的代码路径下
修改
为
然后ESC
:wq
保存退出。
再次git push
,弹出框输入密码,即可提交。
七、git命令合集
一张酷图帮你收集齐所有git命令