跳转至

git#

git 是一个版本管理的工具,能够非常方便的对项目进行版本控制。

1 建立自己的代码库#

假设你的用户名是zzz
(1)生成公钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa.zzz
cat ~/.ssh/id_rsa.zzz.pub 保存到icode或者是自己的github上
(2)clone

git clone  xxxxx代码库             # 将代码库克隆到本地
## 如果机器是多个人使用的话用--local,如果是自己一个人的话可以设置成--global
git config --local user.email zzz邮箱
git config --local user.name zzz用户名
git push origin master:refs/for/master

2 基本操作#

当我们新增或者更新了一个文件后,如何上传到代码库

git add xxx
git commit -m '注释'
git push origin HEAD:refs/for/master

从代码库将新代码下载到本地,更新本地库

git pull

3.常用操作#

还原文件到之前的某个版本#

当发现新提交的版本有问题,想回退到之前的某个版本的之后,可以进行如下操作。git log
比如我想修改自己写的这个utils.py 代码

git log utils.py
## 可以看到一共提交了3次,假设喔想回退到9.25提交的那个版本
git checkout 742bf4a53e473b2536b53cb3ad56072ae236a1c3 utils.py 
git commit -m "revert to previous version"

查看git的整体配置#

git config --global --edit

repo中含有子模块的#

git pull --recurse-submodules

git分支#

新建分支
git checkout -b v1

删除分支
Git-命令行-删除本地和远程分支
切换到要操作的项目文件夹命令行: $ cd <ProjectPath>
查看项目的分支们(包括本地和远程) ...
删除本地分支命令行: $ git branch -d <BranchName>
删除远程分支命令行: $ git push origin --delete <BranchName>

对比不同分支的diff#

Git diff branch1 branch2 --stat   //显示出所有有差异的文件列表

Git diff branch1 branch2 文件名(带路径)   //显示指定文件的详细差异

Git diff branch1 branch2                   //显示出所有有差异的文件的详细差异

合并不同远程的code#

https://zhuanlan.zhihu.com/p/346218679

##git clone root@139.196.174.136:/home/git/user_profile.git
## 在主git下,增加另一个远程
git remote add yl root@139.196.174.136:/home/git/user_profile.git
git fetch yl

## 在本地创建lcoal分支并拉取yl代码到local,自动切换到local, 这里我的local分支命名为了yl
git checkout -b yl yl/master

## 合并代码
git checkut master
git merge yl   # 这个时候会报错   fatal: refusing to merge unrelated histories
## merge问题修复

## 出现原因是因为两个分支没有取得联系,在操作命令后面加
git merge yl --allow-unrelated-histories   # 需要处理下冲突

git add

git commit -m "提交日志"

git 目录大小过大#

本身代码很少,但是现实空间却很大,.git/objects/pack 文件过大,可能是由于开发过程中上传过大文件,虽然现已删除,但仍然保存着git记录中。

## 查找大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"
##  删除文件
git filter-branch --force --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch 要删除后的文件夹' --tag-name-filter cat -- --all

## 
git push --force --all


### 如果以上方式不生效,就重建一个项目