目录
- GIT初始化设置:
- GIT基本操作
- GIT分支操作
- GIT标签操作
- Github同步原作者代码
- GIT多人协作的工作模式
- GIT同时关联码云Gitee和GitHub仓库
- Github 解决敏感配置文件上传问题
- .gitignore文件忽略原则
- 搭建git私服,以ubuntu为例
Git的官方网站:http://git-scm.com
GIT初始化设置:
- 创建密钥
ssh‐keygen ‐t rsa ‐C "[email protected]"
- 添加远程仓库
添加远程origin库关联
git remote add origin [email protected]:lingcoder/xxx.git
查看远程仓库
git remote -v
删除远程origin库的关联
git remote rm origin
- 用户名邮箱配置
全局配置
git config --global user.name "lingcoder"
git config --global user.email "[email protected]"
git config --list
项目单独配置(在项目根目录下)
git config user.name "lingcoder"
git config user.email "[email protected]"
git config --list
- Clone远程仓库
git clone 项目地址
- 创建本地仓库
git init
- 自定义操作
让Git显示颜色,会让命令输出看起来更醒目
git config ‐‐global color.ui true
自定义git命令,以简化"git status"成"git st"为例:
git config ‐‐global alias.st status
自定义日志颜色
git config ‐‐global alias.lg "log ‐‐color ‐‐graph ‐‐pretty=format:'%Cred%h%Creset ‐%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' ‐‐abbrev‐commit"
git lg
GIT基本操作
- 添加到暂存区区
表示添加所有内容
git add -A
表示添加新文件和编辑过的文件不包括删除的文件
git add .
表示添加编辑或者删除的文件,不包括新添加的文件
git add -u
强制添加一个被.gitignore文件忽略的文件的版本库
git add ‐f [文件名]
- 提交
git commit`
- 删除
从版本库删除某个文件
git rm [文件名]
- 版本回退
撤回到某个版本
git reset --hard [提交ID]
查看过去的提交历史
git log
查看所有的提交历史
git reflog
- 撤销修改
让file回到最近一次 "git commit" 或 "git add" 时的状态
git checkout -- [文件名]
可以把暂存区的file修改撤销掉(unstage),重新放回工作区
git reset HEAD [文件名]
GIT分支操作
- 创建分支
创建一个dev分支并且切换到dev分支
git checkout ‐b dev
创建dev分支
git branch dev
切换到dev分支
git checkout dev
创建远程origin的dev分支到本地
git checkout ‐b dev origin/dev
查看分支
git branch
分支命名规范: issue-100 bug修复分支 feature-sms sms功能分支
- 分支合并
合并dev到当前的分支
git merge dev
合并分支,并且禁用 Fast forward
git merge ‐‐no‐ff ‐m "merge with no‐ff" dev
Fast forward模式: Git在merge时生成一个新的commit,以便于从分支历史上就可以看出合并分支信息
- 推送分支
当前master分支推送到远程
git push ‐u origin master
绑定分支
将本地的dev分支和远程的origin的dev分支绑定
git branch ‐‐set‐upstream dev origin/dev
以后就可以直接pull了
git pull
- 分支删除
删除dev分支
git branch ‐d dev
强行删除
git branch ‐D dev
- stash功能
把当前的工作状态保存下来,一边后面恢复,包括index区。
git stash
把当前的工作状态保存下来,一边后面恢复,包括index区。
git stash list
恢复statsh内容,但是不删除statsh
git stash apply
恢复指定的stash
git stash apply stash@{0}
删除stash内容
git stash drop
恢复同时删除stash内容
git stash pop
GIT标签操作
- 本地操作
查看分支
git tag
给当前分支打标签
git tag
给某个提交打标签
git tag [标签名] [提交ID]
创建带有说明的标签,用 -a 指定标签名, -m 指定说明文字
git tag ‐a [标签名] ‐m "第一个正式版本" [提交ID]
查看标签说明
git show [标签名]
删除标签
git tag -d [标签名]
- 远程操作
标签推送
git push origin [标签名]
推送全部尚未推送到远程的本地标签:
git push origin ‐‐tags
删除远程标签
1. 先删除本地标签
git tag -d [标签名]
2. 再推送远程
git push origin :refs/tags/[标签名]
Github同步原作者代码
1. 查看远程状态
git remote -v
2. 添加原作者的远程仓库到remote
git remote add upstream 原作者远程仓库地址
3. 同步fork
git fetch upstream
4. 切换到本地主分支
git checkout master
5. 把 upstream/master 分支合并到本地 master
git merge upstream/master
6. push到远程仓库
git push origin master
7. 解决冲突
直接编辑冲突文件,然后提交更改重新push即可
GIT多人协作的工作模式
1. 首先,试图推送自己的修改
git push origin branch-name
2. 如果推送失败,则因为远程分支比你的本地更新,需先试图合并
git pull
3. 如果合并有冲突,则解决冲突,并在本地提交
4. 没有冲突或者解决掉冲突后,再推送就能成功!
git push origin branch-name
如果"git pull"提示“no tracking information”,则先命令绑定关系
git branch --set-upstream branch-name origin/branch-name
GIT同时关联码云Gitee和GitHub仓库
- 删除已有的默认远程库:
git remote rm origin
- 关联码云的远程库
git remote add [远程库别名] [email protected]:xxx/xxx.git
- 关联GitHub远程库
git remote add [远程库别名] [email protected]:xxx/xxx.git
- 查看远程库信息
查看所有远程库信息
git remote ‐v
- 分别推送到github和gitee
以别名github为例,推送到GitHub,使用命令:
git push github master
以别名gitee为例,推送到码云,使用命令:
git push gitee master
至此,我们的本地库就可以同时与多个远程库互相同步
Github 解决敏感配置文件上传问题
- 将真正的config文件加入.gitignore,然后推送一个基本的config_example文件
- push 结束后,再把 config_example 添加到 .gitignore 中。
- 经典情景: 别人先clone 你的项目,把 config_example 文件 pull 下来后,复制一份再重命名为config,根据自己的环境稍加修改config文件。然后把两文件都添加到.gitignore 中。以后push 则不会再对远程仓库造成影响。
.gitignore文件忽略原则
- 忽略文件的原则:
1. 忽略操作系统自动生成的文件,比如缩略图等;
2. 忽略编译生成的中间文件、可执行文件等;
3. 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
- 检查文件忽略情况
git check‐ignore ‐v [文件名]
搭建git私服,以ubuntu为例
- 基本使用
1. 安装git:
sudo apt-get install git
2. 创建一个git用户,用来运行git服务:
sudo adduser git
3. 创建证书登录:
收集员工公钥`id_rsa.pub`文件,导入到`/home/git/.ssh/authorized_keys`文件里,一行一个。
4. 初始化Git仓库:
选定目录作为Git仓库,假定是`/srv/sample.git`,在`/srv`目录下输入命令:
sudo git init --bare sample.git
5. 把owner改为`git`
sudo chown -R git:git sample.git
6. 禁用shell登录: 编辑`/etc/passwd`文件
git:x:1001:1001:,,,:/home/git:/bin/bash
改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
7. 克隆远程仓库:
git clone git@server:/srv/sample.git
- 扩展使用