Git-看这篇就够了

懵逼的开始

首先Git要想pull和push代码是要给gitLab或者GitHub你电脑的SSH Key的

我擦,懵逼了。我怎么给他SSH Key呢 别急!我手摸手教你

生成SSH密钥过程

1.查看是否已经有了ssh密钥:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除 2.生存密钥:

$ ssh-keygen -t rsa -C xxx@163.com

按3个回车,密码为空,再次查看.ssh文件中得到了两个文件:id_rsa和id_rsa.pub 其中id_rsa.pub就是我们要使用的那个,复制里面的全部内容,粘贴给gitLab或者GitHub

为github帐号添加SSH keys

Clone代码或者Push代码

工作中有两种情况

1.我是小喽啰,代码已经在Git仓库上了 这种情况下我只要找个干净的目录(为啥是要干净的呢,我怕你把xx老师的文件一起push上去),打开命令行工具,cd 到这个目录下

git clone 'git@github.com:lets-blade/blade.git'

项目就下载下来了

2.我是架构师,代码的原型还在我的电脑上呢。还没有进行Git管理呢

这种情况下,我要自己去GitLab或者GitHub上创建仓库,然后到你的项目的根目录下

git init #初始化
git status #获取状态
git add . # .*代表全部添加或者-A
git commit -m "message" #将内容提交,在冒号里面最好填写英文注释
git remote add origin git@github.com ##此时本地工程与远程仓库已经建立了联系
git push -u origin master #将本地的内容同步到远程仓库中要确认你的新建目录下有东西git允许将空目录同步到远程

忘记配置.gitigore

如果不配置.gitignore的文件,带push代码的时候就会把一写不必要的文件push到远程仓库,如.idea文件。如果不小心出现此文件在远程仓库可以通过一下步骤delete此文件:

1.配置.gitignore文件(新建/编辑)

*.iml
.gradle
/local.properties
.DS_Store
/build
/captures
.externalNativeBuild
.idea

2.将.gitignore文件上传到远程仓库

git pull
git add .gitignore
git commit -m 'edit .gitignore'
git push origin master

3.删除git的.idea文件

git rm --cached -r .idea //只针对某个目录的文件


git rm -r --cached .   //清理全部

4.同步到远程仓库

git add .
git commit -m 'delete .idea'
git push origin master

工作中如何管理代码

作为架构师,哈哈,不能让小弟们乱改代码,然后随意提交,万一哪个实习生把代码提交了,然后不管了。就去约会小女友了。后面的人下载代码都是一堆冲突。这种情况我就要展示我的管理代码的超能力了,不吹了

查看目录下的远程地址

git remote -v 

一般工作中我们都要有几个分支,

1.master #主分支

2.dev #开发分支

3.release #上线打包的分支 我的习惯是每次上线我都要建一个对应版本的分支 比如 release-1.0.1 防止今天上线明天要修改bug,我就可以在这个分支上修改然后打包。等下个版本上了后我就会把之前的删掉。

4.fix-bug #开发中有的bug需要有人去解决,我就会拉一个分支出来修改。然后在合拼会dev中

使用git stash命令保存和恢复进度

git stash
保存当前工作进度会把暂存区和工作区的改动保存起来执行完这个命令后在运行git status命令就会发现当前是一个干净的工作区没有任何改动

git stash save 'message...'可以添加一些注释

git stash list
显示保存进度的列表也就意味着git stash命令可以多次执行

git stash pop [index] [stash_id]

git stash pop 恢复最新的进度到工作区git默认会把工作区和暂存区的改动都恢复到工作区
git stash pop --index 恢复最新的进度到工作区和暂存区。(尝试将原来暂存区的改动还恢复到暂存区
git stash pop stash@{1}恢复指定的进度到工作区stash_id是通过git stash list命令得到的 

通过git stash pop命令恢复进度后会删除当前进度

怎么建分支呢

假设我现在在master分支上:

git checkout -b dev  

那么通过这行命令我就在本地新建了一个dev分支 
接下来如何将该分支推送到远程不推到远程小弟们怎么在dev上写代码呢 

git push -u origin dev  

这样其他人通过

git fetch origin  

git branch

这条命令就能在本地看到dev分支了

获取远程更新就可以下载clone该条分支的代码然后合作开发一些东西了

将远程分支dev 获取到本地 dev 

git checkout -b dev origin/dev  

怎么提交代码呢

回家四部曲


git add .

git commit -m 'fix 一大堆bug'

git pull

git push

怎么解决冲突的代码呢

你以为四部曲走完就能下班回家陪女友吗,天真了,代码冲突了!!!

当你提交代码前都会去pull一下别人提交的代码,除非你在别人前提交,然后隔壁工位上的那个队友4点钟就开始等着提交代码了。

关于代码冲突这里我们需要先了解一个命令 reset

有的时候我想看之前的某个版本,工作中很常见的情况就是我在之前的版本删除了某个文件。现在我想把它找回来。

git log 或者 git reflog 查看commit_id

我喜欢用git reflog 它可以查看到我们的每一次的提交log ,git log 不好的地方是他看不到版本回退后的commit_id ,比如我reset后关闭窗口,那就Git log 就看不到reset后的log了

git reset –hard commit_id 去到过去的某个版本,把我想要的文件拿出来后,在继续git reset –hard commit_id 到最新的版本。这样就可以在历史版本之间穿梭咯

git reset commit_id 可以对已经git add 和 git commit 的版本进行,完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改。

如何撤销已经提交的代码

首先通过git log查看提交信息以便获取需要回退至的版本号

然后通过git reset --soft <版本号>重置至指定版本的提交达到撤销提交的目的参数soft指的是保留当前工作区以便重新提交 

git reset --soft aa909cff2239536df14820fe086d96305b24e9f1

然后通过git log确认是否成功撤销,

通过git push origin  master --force强制提交当前版本号以达到撤销版本号的目的

git push origin  master --force    这里需要注意一个地方就是master你要看你看看你在哪个分支上必须添加参数force进行强制提交否则会提交失败报错原因本地项目版本号低于远端仓库版本号

最后修改代码重新提交和推送

如何比较diff

当前还没有提交代码,但是我想喝上次提交的代码做个比较

git diff HEAD

我想本次提交的代码和上次提交的代码做个比较

git diff HEAD^ HEAD

我想和某次提交的代码作比较

git diff SHA1 SHA2

那么如何删除一条本地分支和其对应的远程分支了

首先删除本地分支

git branch -d release-1.0.1        #就删除了本地的release-1.0.1分支 

那么接下来删除其对应的远程分支

git push --delete origin release-1.0.1

将dev分支上的代码合并到master上

版本上线后,我们要把之前的版本合拼到master分支上,然后打个tag。以防老板要回滚到某个版本

git checkout master      #先切换到master分支上来

git merge --no-ff -m "合并版本1.0.1" dev 

打标签操作

git tag v1.0.1  		#即打了一个v1.0.0的标签.

tag是对历史一个提交id的引用如何老板要回滚到之前的版本
那就可以用tag命令来切换到目标版本

git checkout v1.0.1  

切换到tag历史记录会处在分离头指针状态这个修改是很危险的
在切换回主线时如果没有合并之前的修改提交基本都会丢失如果需要修改可以尝试

git checkout -b test tag  		#创建一个基于指定tag的分支

推送本地分支tag到远程

git push origin --tags 

git tag -d v1.0.1  			 #删除一个本地tag 

git push origin --delete tag v1.0.1 			#删除远程tag 

也可以这样删除远程分支
git push origin :refs/tags/v1.0.1

Loading Disqus comments...
Table of Contents