Git
git config
# 查看git信息
git config --list
git config --global user.name
git config --global user.email
# 配置git信息
git config --global user.name xxx
git config --global user.email xxx@xxx.xx
# git 忽略 crlf / lf 自动转换
git config --global core.autocrlf false
git 常用命令
git status
git clone [-b branch-name] https://xxx [dir-name]
git add .
git commit -m xxx
git pull origin xxx
git push origin xxx
git tag v1.0.2 # 为当前分支打标签
git pull --rebase origin xxx
# 解决冲突后
git add .
git rebase --continue
git rebase --abort
# 设置 git pull 以 rebase 模式进行
git config --global branch.autosetuprebase always
# 修改 ignore 清理缓存
git rm -r --cached .
git 分支操作
git branch
git checkout -b xxx
git checkout xxx
git branch -v # 查看最后一次commit信息
git branch -d xxx # 删除分支, -d 会检查 merge 状态, -D 强制删除
git cherry-pick 4c805e2 # 拉取一个特定的 commit,会自动生成一个新的 commit
git branch -m <oldbranch> <newbranch> # 重命名本地分枝
git 远程分支
git branch -r # 查看远程分支
git fetch --all # 将本地所有分支与远程保持同步
git fetch -p # 清理本地无效分支(远程已删除但是本地没删除的分支)
git push origin --delete xxx # 删除远程分支
git remote update origin -p # 更新远程分支列表
git remote -v # 查看当前仓库 git 远程地址
git 恢复操作
git log
# 1、在工作区的代码
git checkout -- . # 不会影响暂存区(add .)和 commit 之后的代码
# 2、代码git add到缓存区,并未commit提交
git reset HEAD . # 将暂存区的代码恢复
git reset HEAD a.txt
# 3、git commit到本地分支、但没有git push到远程
git reset --hard HEAD^ # 重置工作区,回到上一次提交,会清空本次的所有更改,注意尽量避免使用
git reset --hard d9e0ed0 # 撤回到指定提交
git reset --soft d9e0ed0 # 撤回到指定提交并将变动恢复到工作区
# 4、git push把修改提交到远程仓库
git reset --hard HEAD^
git push origin dev -f # 强制提交一次,之前错误的提交就从远程仓库删除
# 或
git revert HEAD # 撤销最近的一个提交
git revert 6047c4ea3 # 会建立新的commit
git revert -n 6047c4ea3 # 不自动建立新的commit
暂存
git stash # 没有在 git 版本控制中的文件,是不能被 git stash 存起来的
git stash --include-untracked # 暂存包含没有被追踪的的文件
git stash list
git stash pop # 应用并删除最近一次暂存
git stash pop stash@{1}
git stash clear # 删除所有缓存的stash
fork 操作
git remote add upstream https://github.com/B/B.git # 关联其他远程仓库
git remote -v # 查看远程仓库地址
git branch -vv # 查看本地分支对应的远程分支
git pull upstream # 同步上游代码
其他命令
git rm -r --cached . # 清理缓存
linux - centos 安装 git
# 下载安装包
wget https://github.com/git/git/archive/v2.8.0.tar.gz
# 解压
tar -xvf v2.8.0.tar.gz
# 下载依赖
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
# 首先 cd 到 git 解压后到目录 然后 编译并安装Git
./configure prefix=/usr/local/git
make
make install
linux - ubuntu 安装 git
apt update
apt install git
git fetch
git fetch # 拉取所有更新到本地远程分支上(只是到本地的远程分支上,通过 origin/xxx 访问)
git fetch -p # 拉取所有更新到本地远程分支上,并且删除不存在的远程跟踪分支(只是删除 origin/xxx 分支)
git fetch origin master
git pull origin master # 可以将下列命令合并为一步
# 第一种方式,当前处在 master 分支
git fetch origin master
git merge origin/master
# 第二种方式,当前处在 master 分支
git fetch origin master:localBranch
git merge localBranch
# 第三种方式,当前处在 master 分支
git fetch origin master:temp
git merge temp
git branch -D temp
git merge
git merge targetBranch # 合并 targetBranch 分支到当前分支
git merge --no-commit targetBranch # 不要自动生成 commit
git rebase targetBranch # 将当前分支的起始 commitId rebase 到 targetBranch 分支顶端
# 解决冲突时
# ====== 标记之前的内容来自于接收合并的分支,而在这之后的内容来自于要合并的分支
git 代码行数统计
# 所有人
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --since=2023-03-01 --until=2023-5-31 --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
# 单人
git log --since=2023-03-01 --until=2023-5-31 --author="wudandong" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s", add, subs, loc }'
# 忽略文件夹
git log --since=2023-03-01 --until=2023-5-31 --author="wudandong" --pretty=tformat: --numstat -- . ":(exclude)app/public" | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s", add, subs, loc }'
# -- . ":(exclude)folderName" 排除文件夹
# -- . ":(exclude)folderName1" ":(exclude)folderName2" 排除多个文件夹
get 切换仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin git@gitlab.hollysys.net:hsm-os/code-lab/fex/hsmos-event-bus.git
git push -u origin --all
git push -u origin --tags