git

Git

Posted by ooftf on April 12, 2021

操作

Git global setup
git config --global user.name "lihang36"
git config --global user.email "lihang9@jd.com"

SSH

GIT SSH
GITHUB SSH

一般git操作

从服务端拉取代码(Create a new repository)

git clone http://git.jd.com/lihang36/ShareModule.git

从服务器拉取所有分支代码

git clone xxx
cd xxx
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git pull --all
push到新的git地址
git push --mirror https://github.com/ooftf/Jdm.git

从服务端拉取指定文件夹

git init TIM_Android
cd TIM_Android
git remote add origin https://github.com/tencentyun/TIMSDK.git
git config core.sparsecheckout true
echo "Android/*" >> .git/info/sparse-checkout
git pull origin master

提交代码

git add README.md
git commit -m "add README"
git push -u origin master

已存在文件和git建立连接(Existing folder)

第一步  
cd existing_folder
git init
git remote add origin git@git.jd.com:lihang36/demo.git
第二步  
git add .
git commit -m "Initial commit"
git push -u origin master

已存在的git库(Existing Git repository)

cd existing_repo
git remote add origin git@git.jd.com:lihang36/demo.git
git push -u origin --all
git push -u origin --tags

通过命令行修改远程地址

git remote set-url origin https://gitee.com/jouypub/json.git

通过命令Https 修改为SSH

git remote set-url origin git@github.com:ooftf/algorithm.git

从一个git仓库迁移到另外一个git仓库

https://blog.csdn.net/nathan1987_/article/details/78529357

1). 从原地址克隆一份裸版本库,比如原本托管于 GitHub。

git clone –bare git://github.com/username/project.git

–bare 创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库。

2). 然后到新的 Git 服务器上创建一个新项目,比如 GitCafe。

3). 以镜像推送的方式上传代码到 GitCafe 服务器上。

cd project.git git push –mirror git@gitcafe.com/username/newproject.git –mirror 克隆出来的裸版本对上游版本库进行了注册,这样可以在裸版本库中使用git fetch命令和上游版本库进行持续同步。

4). 删除本地代码

cd .. rm -rf project.git 5). 到新服务器 GitCafe 上找到 Clone 地址,直接 Clone 到本地就可以了。

git clone git@gitcafe.com/username/newproject.git 这种方式可以保留原版本库中的所有内容

submodule 相关

添加 submodule

git submodule add http://git.jd.com/JmClient/JmShareModule.git

将所有 submodule切换到master分支

git submodule foreach "git cheackout master"

从remote拉取某个submodule

1. 第一种方式
    cd submodule_name
    git submodule init 初始化子模块
    git submodule update 更新子模块
2. 第二种方式
    在父module中
    git submodule update --init --recursive

删除submodule(暂定)

git rm submodule_name
git commit -m "remove submodule"
git push origin master

问题

Fetch和pull的区别 ?

Fetch从远端检出一个新的本地分支 pull将远程分支和本地分支合并

error

already exists in the index

git rm -r --cached directory
git commit -m "removing directory"

REMOTE HOST IDENTIFICATION HAS CHANGED

删除 .ssh 文件下的 known_hosts 文件

遴选(cherry-pick)

有时,你不想将整个 Git 分支合并到另一个分支,而是想选择并移动几个特定的提交。这个过程被称为 “ 遴选(cherry-pick)”。