1. git撤销提交
git reset --hard HEAD^ //多次提交执行多次
git push origin master --force //强制将当前点提交的master分支
git reset --soft HEAD^ //撤销 add
git reset --soft HEAD~1
2. git撤销add
git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了
git commit --amend 修改注释
git restore --staged xxx 撤销删除已经删除的文件
2.1 git 撤销 commit
git reset --soft HEAD~
3. git修改远程分支名
git branch -m newname
git push -f origin newname
git push -d origin master
4.查看url
git remote -v
5.创建空白git checkout -b feature/0.1.1 develop
创建空白分支
a. 创建新分支
git branch <new_branch>
git checkout <new_branch>
或者不带历史提交记录
git checkout --orphan <new_branch>
b.删除多余文件
git clean -d -fx
c.清除cached
git rm --cached -r .
git clean -f -d
git commit --allow-empty -m "init"
d.推送到远端
git push origin <new_branch>
6.推送标签TAG到远程仓库
git tag 列出所有标签
git push并不会把tag标签传送到远端服务器上,只有通过显式命令才能分享标签到远端仓库。
a.push单个tag,命令格式为:git push origin [tagname]
例如:
git push origin v1.0 #将本地v1.0的tag推送到远端服务器
b.push所有tag,命令格式为:git push [origin] --tags
例如:
git push --tags
或
git push origin --tags
c.删除tag
git tag -d V0.8.0 删除本地tag
git push origin :refs/tags/V0.8.0 删除远端tag
7. 合并提交
git rebase -i HEAD~2
8. 查看提交历史记录
git log --onelinegit log --oneline --graphgit log -- filePath 查询文件的改动记录
git log --name-only 查询每次提交改动的文件记录git log --pretty=format:"%h %s %an %ad" --date=short | grep leijinfeng1 查询个人提交记录
git log --no-merges --since=2020-06-02 --until=2022-06-04 --author="leijinfeng1" --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 }'
查询提交统计
Git命令统计在一段时间内的代码更改数量
1、根据用户名来统计
git log --author="username" --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 }' -
把username换成自己的用户名就可以了
2、按照一段时间来统计
git log --since=2022-02-14 --until=2022-07-28 --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 }'
把时间切换成自己想要统计的时间段就可以了
3、按照用户名和时间段来统计
git log --author="username" --since=2021-12-31 --until=2022-08-01 --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 }' -
同理,更改用户名、时间为自己想要统计的就可以了
9. git 查看本地操作记录
git reflog
10. 提交到多个远程仓库
修改配置文件 .git\config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = https://gitee.com/xxxx/xxx.git
fetch = +refs/heads/*:refs/remotes/origin/*
+ [remote "all"]
+ url = https://gitee.com/xxx/xxx.git
+ url = https://gitHub.com/xxx/xxx.git
[branch "master"]
remote = origin
merge = refs/heads/master
同时提交到两个仓库
git push all master
git push all develop
git push all --tags
只提交一个仓库
git push origin master
git push origin develop
git push origin --tags
11. --depth=1 后如何拉取其他分支:
$ git remote set-branches origin 'remote_branch_name'
$ git fetch --depth 1 origin remote_branch_name
$ git checkout remote_branch_name
https://www.jianshu.com/p/1397ce990c58
12. 查看远程仓库地址:
git remote get-url --push origin
或者直接查看项目根目录下 .git/config 文件
13. 常用git stash命令:
(1)git stash save "save message" : 执行存储时,添加备注,方便查找,只有git stash 也要可以的,但查找时不方便识别。
(2)git stash list :查看stash了哪些存储
(3)git stash show :显示做了哪些改动,默认show第一个存储,如果要显示其他存贮,后面加stash@{$num},比如第二个 git stash show stash@{1}
(4)git stash show -p : 显示第一个存储的改动,如果想显示其他存存储,命令:git stash show stash@{$num} -p ,比如第二个:git stash show stash@{1} -p
(5)git stash apply :应用某个存储,但不会把存储从存储列表中删除,默认使用第一个存储,即stash@{0},如果要使用其他个,git stash apply stash@{$num} , 比如第二个:git stash apply stash@{1}
(6)git stash pop :命令恢复之前缓存的工作目录,将缓存堆栈中的对应stash删除,并将对应修改应用到当前的工作目录下,默认为第一个stash,即stash@{0},如果要应用并删除其他stash,命令:git stash pop stash@{$num} ,比如应用并删除第二个:git stash pop stash@{1}
(7)git stash drop stash@{$num} :丢弃stash@{$num}存储,从列表中删除这个存储
(8)git stash clear :删除所有缓存的stash
来源: https://www.cnblogs.com/zndxall/archive/2018
14. submodule 克隆含有子模块的项目
先clone当前项目,然后再更新子模块
1)git submodule init
2)git submodule update
1和2可以合并为:git submodule update --init
若还存在嵌套子模块可以用:git submodule update --init --recursive
15. git push 时发现有冲突
1. git pull --rebase 先拉代码,解决冲突
2. git add . 再添加修改到缓存区
3. git rebase --continue 以 amend 的形式重新 commit
4. git push origin master 再重新 push
16. 设置取消代理
git config --global https.proxy http://127.0.0.1:4780
git config --global https.proxy https://127.0.0.1:4780
git config --global --unset http.proxy
git config --global --unset https.proxy
17. git 冲突处理
git cherry-pick --continue
git rebase --continue
git merge --continue
18. 修改 git commit 提交记录里面的 email 与 username
修改Git 本次Commit提交记录的用户名Name和邮箱Email
git commit --amend --author="new-name <xxx@new.com>"
修改Git 全部Commit提交记录的用户名Name和邮箱Email
原文(有删改):https://cloud.tencent.com/developer/article/1352623
准备
在项目根目录下创建 email.sh 写入下面这段代码
#!/bin/sh
git filter-branch --env-filter '
# 要修改的邮箱
OLD_EMAIL="xxx@old.com"
# 新的邮箱以及用户名
CORRECT_NAME="your-name"
CORRECT_EMAIL="xxx@old.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 --tags
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch Rakefile' HEAD
把OLD_EMAIL、CORRECT_NAME、CORRECT_EMAIL改成 需要修改的新旧邮箱用户名即可
19. git http 提交拉取时每次需要输入用户名和密码
git config --global credential.helper store
20. 一个命令解决 git status 命令执行慢
git gc
如果你的 git 仓库文件较多的话,随着时间越长,你每次执行 git status 命令会越来越慢。这是由于本地有过多的缓存造成的。git 为这个问题提供了一个简单的解决方案,那就是: git gc 当你执行这个命令时,git 会清理不必要的文件并优化本地存储库。