初次安装
配置基础信息。
1.$ git config --global user.name "你想要显示的姓名"
2.$ git config --global user.email “你想要显示的邮箱 ”
拉代码的时候可以看到有两个选项 一个是Https 一个是ssh
配置密钥SSH验证
一次配置永久免登录。
ssh-keygen -t rsa -C "你想显示的标识信息 可以是邮箱也可以是任何字符串" (全回车跳过,不需要密码)
(默认地址C:/users/用户名/.ssh)中
id_rsa 私钥
id_rsa.pub 公钥这一对钥匙 用于加密的身份认证,
这一对密钥就是用于ssh 认证
设置->ssh 将公钥中的信息填入其中,即可。
常用基础命令:
- git remote -v : 查看已有分支,主机名
- git add (文件名):添加指定变 git status :查看当前变更文件
- git add . :添加所有变更(. 可以替换为文件夹, 文件)
- git commit -m "提示信息": 将变更提交到本地
- git push (主机名)(分支名): 将推送到远程仓库- (一般是本地派生出来的仓库和分支 不填写默认是当前分支)
- git pull (地址https/ssh)(分支名): 获取指定分支指定内容到本地 。
- scp 文件 用户名@地址:目的位置 :将文件传输到指定位置。
- ssh username@host_ip : 连接到远程linux 服务器
- git fetch --all && git reset --hard origin/master: 获取仓库内容强制覆盖本地修改。
一般的项目开发流程:
派生:
首先派生出自己的 项目地址。
克隆:
1.克隆你的项目地址的HTTPS 或 SSH
2.来到你的文件夹右键呼出 git Bash(也可以从桌面或别的地方呼出Git 界面然后cd 进入到要克隆的位置)
3.git clone https://github.com/××× 或 git clone ssh://igerrit.storm:29418/tools/repo.git ,
克隆完成后去到文件夹内邮件呼出git
能看到分支。
这时候你可以 将主项目仓库地址添加的 git 中取一个别名便于使用:
用于以后的拉取。(git pull zhucangku <fenzhi>)
推送
1.git add . :添加所有变更(maven相关文件不要推送上去 pom文件每次加载都能获取到 可以配置 .gitigore文件设置过滤)
2.git commit -m "备注信息"
3.git push (主机名)(分支名)(PS: 一般不用填写,默认都是当前。)
如此便完成了像自己的仓库推送代码, 前往gitLab 或者别的代码管理平台,申请讲代码与主分支合并,就完成了一次开发。
.gitigore文件常见过滤设置:
发生错误:
最后一招: 删除派生关系 重新派生。
一些经验之谈:
分支: 版本控制,不同的分支可以代表不同的一份代码,便于开发迭代和干别的事情。
目前的项目git 流程:
先有一个主分支, 随着迭代慢慢延展出新的分支,
例如刚开始开发的时候 master 大家都在上面写东西, 然后迭代二了, 测试还在测试 master上的东西,
开发就可以另开一个分支, (克隆的master分支),在新分支上进行开发。 如此反复。最后全合并,BUG 也会在新分支上修复。最后合并。
一个普通员工的git使用: 先派生出属于自己的项目,所谓派生其实就是复制一份。 然后地址会变成自己的地址,派生其实是没有多大关联的。 你在自己的派生项目上将代码clone到本地,这就是一份可执行的代码。
你想将自己的代码推到 主分支:
首先推到自己的分支,然后再进行合并操作。(合并需要权限)
推错东西了:
1.放弃所有修改 直接覆盖本地。(内容太多不知道怎么改)
2.推送合远端一致的内容, git 会自动合并。 有时候你看着你改动了很多文件 其实git判断内容与远端一致 会自动合并
git log #查看日志 (gitLab 查看更为便捷~)
git reset --hard HEAD~1 #回退1步
git reset --hard efa5bde #回退指定
坑:
我在分支1写东西, 项目开了另一个分支2, 我写完东西之后推送到分支1的远端, 然后开始去分支2 写东西。 开分支2的时候使用的是本地分支1 (PS:此时的分支1 已经不是项目开分支2的时候的分支1了)。此时我没有拉取远端分支2的代码 所以我本地的分支2 其实和远端的不一致的。
带来的问题:
我推送上去的代码自然和分支2 想要的新增不一致, 夹带了我在分支1 多出来的这些内容。、
怎么解决的:
1. 我尝试新建分支,将分支2 写的东西复制出来, 拉取分支2 的内容后,重新添加文件。尝试是吧, 分支1的内容依存在。
2.删除派生关系肯定可以,但是不想用。
3.使用git reset --hard。 将分支2的内容 回退到指定的分支2 而不是使用pull 拉取分支2 的内容。 成功了。
总结:
git 的缓存机制, 你提交的代码会被默认加载一起给你, 所以新建分支后拉取的远端代码其实是夹带了的。
reset 强制回退到分支创建前的版本即可。
---------------------------------------
大文件限制
git 每次上传文件是有限制的, push 50mb 警告 100mb 限制
当commit 了100mb 以上的大文件时, push 就会报错, 提示你push了大文件。
删除大文件后重新 add commit push 三连并不不能解决问题,因为Git 会回头去Log 检查你的提交 依然会提示大文件push
解决办法:
使用 git log 命令 /或者直接打开log 文件查看近期提交记录。
、
回退到 更早之前的commit (文件并不会丢失,)删除大文件(错误提示里有大文件是什么。)后 再次add commit push 即可。
.git文件提交多了很大。
带来的影响: 每次clone 都会去clone .git 文件 github本来就慢,.git内记录的提交记录一多就会有上GB。
原因:每次提交都会记录下本次的提交记录。
解决办法 :只是省事 clone 的时候可以在后方加 -depth == 10 参数(只保留最近10此提交)
也可以删除历史提交。(感觉会有不好的地方。。还是不要删除为好)
git for-each-ref --format="delete %(refname)" refs/original | git update-ref --stdin git reflog expire --expire=now --all git gc --prune=now