跳到主要内容

Git

基础操作

查看安装结果
git

创建本地仓库
进入文件夹创建仓库
git init

配置个人信息
git config user.name 'xxx'
git config user.email 'xxxx'

查看文件状态
git status

添加所有文件到暂存区
git add .
添加指定文件
git add xxx.py
取消暂存
git rm --cached '文件名'

丢弃工作区的改动
git checkout -- '文件'

暂存区文件提交到仓库区
git commit -m '版本描述'

添加提交仓库合并命令
git commit -am '版本描述'

查看历史版本
git log 或 git reflog
git reflog 可以查看所有记录(包括commit和reset的操作),包括已经被删除的commit记录
git log 下不能查看已经删除了的commit记录

回退版本
方案1:(不推荐)
HEAD表示当前最新版本
HEAD^表示当前最新版本的前一个版本
HEAD^^表示当前最新版本的前两个版本,以此类推...
HEAD~1表示当前最新版本的前一个版本
HEAD~10表示当前最新版本的前10个版本,以此类推...
git reset --hard HERD^
方案2:
git reset --hard 版本号

撤销修改
撤销工作区代码
git checkout -- '文件'

撤销暂存区代码
第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
第二部:撤销工作区代码
git checkout 文件名

对比版本
对比版本库与工作区
git diff HEAD -- '文件名'

对比版本库
git diff HEAD HEAD^ -- '文件名'

删除文件
删除文件
rm '文件名'
git确认删除文件
git rm '文件名'
删除后记录删除操作版本
git commit -m '删除描述'

误删
git撤销修改
git checkout -- 文件名

从远程获取最新版本
git fetch
比较本地的master分支和origin/master分支的差别
git log -p master ..origin/master
进行合并
git merge origin/master

也可以用以下指令:
git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支
git diff tmp //將當前分支和tmp進行對比
git merge tmp //合并tmp分支到当前分支

远程仓库克隆

git clone xxx
配置个人信息xxxx(省略)

推送
git push
拉取
git pull

设置账号密码
设置记住密码(默认15分钟):
git config --global credential.helper cache
如果想自己设置时间,可以这样做(1小时后失效)
git config credential.helper 'cache --timeout=3600'
长期存储密码:
git config --global credential.helper store

标签

当某一个大版本完成后,需要打一个标签
记录大版本
备份大版本代码

在本地打标签
git tag -a 标签名 -m '描述标签'

推送标签到远程仓库
git push origin 标签名

删除本地标签
git tag -d 标签名

删除远程仓库标签
git pushi origin --delete tag 标签名

分支

master主分支(已经发布好的版本)
dev开发分支

查看当前分支
git branch
创建分支并切换到分支上
git checkout -b dev
设置本地分支跟踪远程指定分支
git push -u origin dev
切换到主分支
git checkout master
合并分支
1.切换到主分支
git checkout master
2.合并分支
git merge dev
推送
git push
删除分支
git branch -d xxx
强制删除
git branch -D xxx
删除远程分支
git push origin --delete xxx

其他

批量修改错已提交记录的个人信息

#!/bin/sh
git filter-branch -f --env-filter '
OLD_EMAIL="mail"
CORRECT_NAME="anonymous"
CORRECT_EMAIL="anonymous@example.com"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$CORRECT_NAME"
export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$CORRECT_NAME"
export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches
# 检查
git log
# 如果失败执行该语句后重新执行脚本
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
# 确认成功后推送
git push origin --force --all