Git 常用命令总结

Git配色

git config --global color.status auto 
git config --global color.diff auto
git config --global color.branch auto

提交流程

git add . | git add 指定文件
git commit -m '提交备注'
git push origin master | git push | git push origin

覆盖本地文件

远端代码强制覆盖本地所有代码

1. 确定分支 
2. 确定需要放弃本地代码 
3. 选择正确的远端分支 例如:origin/master 或 origin/dev 等等 
4. 执行git命令,进行本地覆盖
git fetch --all
git reset --hard origin/master 
git pull

更新/覆盖本地指定文件

git status (查看本地具体哪些文件发生修改)
git checkout origin/master -- path (文件路径从git status中获取)

# reset指定目录
git checkout --ignore-skip-worktree-bits -- path

储藏 stash

       经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是git stash命令。

常用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

合并分支

输入命令git merge -h可以查看相关参数:
--ff  快速合并,这个是默认的参数。如果合并过程出现冲突,Git会显示出冲突并等待手动解决
--ff-only  只有能快速合并的情况才合并。如果合并过程出现冲突,Git会自动abort此次merge
--no-ff  不使用快速合并。会生成一次新的提交记录,这个记录只是标识在这里进行了一次merge操作(目前还没想到应用场景)
--squash  压缩合并。将待合并的分支的内容压缩成一个新的提交合并进来

//--no-commit 就是不提交push,但有commit,合并以后再重新提交push一次 
git merge <branch1> --no-commit

//如果要查看merge后修改了哪些文件
git log --pretty=oneline -10 找到上一个版本commit id(下文用xxxx指代)
git reset xxxx
git status

删除远程与本地分支

# 删除远程分支
git push origin --delete branch_name
# 删除本地分支
git branch -d branch_name

git远程删除分支后,本地git branch -a 依然能看到的解决办法

# 查看remote地址,远程分支,还有本地分支与之相对应关系等信息
git remote show origin
# 本地分支和远程同步
git remote prune origin

日志

git log

查看当前所在分钟所有提交过的版本信息

选项参数:

# 不常用选项参数如下:
-p  按补丁格式显示每个更新之间的差异。
--stat  显示每次更新的文件修改统计信息。
--shortstat 只显示 --stat 中最后的行数修改添加移除统计。
--name-only 仅在提交信息后显示已修改的文件清单。
--name-status   显示新增、修改、删除的文件清单。
--abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
--relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
--graph 显示 ASCII 图形表示的分支合并历史。
--pretty   使用其他格式显示历史提交信息。可用的选项包括oneline,short,full,fuller 和 format(后跟指定格式)


# 以下常用选项参数如下:
-(n)    仅显示最近的 n 条提交
--since, --after    仅显示指定时间之后的提交。
--until, --before   仅显示指定时间之前的提交。
--author    仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交。
--grep  仅显示含指定关键字的提交
-S  仅显示添加或移除了某个关键字的提交

使用实例:

# 只显示版本号和提交时的备注信息
git log --pretty=oneline

# 关键字搜索日志
git log --grep '关键字'

# 显示日期
git log --date=iso

# 通过作者搜索日志
git log --author=“小明”
git log --author=“小明\|小红”

# 通过时间范围搜索日志
//某个日期之后
git log --since=<date>
git log --after=<date>
//某个日期之前
git log --until=<date>
git log --before=<date>
//查出 03.12-03.18 期间的提交
git log --since="2019.03.12" --until="2019.03.18"

git reflog

查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

# 查看指定分支所有pull、commit、delete、checkout记录
git reflog show --date=iso 分支名称[可省略即当前分支]

# 查看指定分支所有记录,显示日期
git reflog show --date=iso 分支名称[可省略即当前分支]

# 关键字搜索log
git reflog --grep '关键字'

忽略而不提交文件的3种情形

  • 从未提交过的文件可以用.gitignore 也就是添加之后从来没有提交(commit)过的文件,可以使用.gitignore忽略该文件 该文件只能作用于未跟踪的文件(Untracked Files),也就是那些从来没有被 git 记录过的文件 比如,忽略log/下的日志文件,可以在.gitignore中写 log/*;
  • 已经推送(push)过的文件,想从git远程库中删除,并在以后的提交中忽略,但是却还想在本地保留这个文件 执行命令
    git rm --cached Xml/config.xml
    后面的 Xml/config.xml 是要从远程库中删除的文件的路径,支持通配符* 比如,不小心提交到git上的一些log日志文件,想从远程库删除,可以用这个命令;
  • 已经推送(push)过的文件,想在以后的提交时忽略此文件,即使本地已经修改过,而且不删除git远程库中相应文件 执行命令 git update-index --assume-unchanged Xml/config.xml 后面的 Xml/config.xml 是要忽略的文件的路径。如果要忽略一个目录,打开 git bash,cd到 目标目录下,执行: git update-index --assume-unchanged $(git ls-files | tr '\n' ' ') 比如有一个配置文件记录数据库的链接信息,每个人的链接信息肯定不一样,但是又要提供一个标准的模板,用来告知如何填写链接信息,那么就需要在git远程库上有一个标准配置文件,然后每个人根据自己的具体情况,修改一份链接信息自用,而且不会将该配置文件提交到库;

文件比对

对比两个分支具体某个文件的差异

git diff branch1 branch2 --stat   //显示出所有有差异的文件列表
git diff branch1 branch2 具体文件路径   //显示指定文件的详细差异
git diff branch1 branch2 //显示出所有有差异的文件的详细差异

其他

git cherry-pick的使用

git cherry-pick可以理解为”挑拣”提交,它会获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。

参数如下:

git cherry-pick [<options>] <commit-ish>...

常用options:
    --quit                退出当前的chery-pick序列
    --continue            继续当前的chery-pick序列
    --abort               取消当前的chery-pick序列,恢复当前分支
    -n, --no-commit       不自动提交
    -e, --edit            编辑提交信息

git merge的使用 

把一个分支或或某个commit的修改合并到当前的分支上。

输入命令git merge -h可以查看相关参数:
--ff  快速合并,这个是默认的参数。如果合并过程出现冲突,Git会显示出冲突并等待手动解决【推荐使用此参数】
--ff-only  只有能快速合并的情况才合并。如果合并过程出现冲突,Git会自动abort此次merge
--no-ff  不使用快速合并。会生成一次新的提交记录,这个记录只是标识在这里进行了一次merge操作(目前还没想到应用场景)
--squash  压缩合并。将待合并的分支的内容压缩成一个新的提交合并进来

使用git不小心merge后的回滚操作:

第一步:git checkout到你要恢复的那个分支上
git checkout develop

第二步:git reflog查出要回退到merge前的版本号
git reflog

第三步:git reset就回退到merge前的代码状态了
git reset --hard [版本号]

启用默认的颜色设置

git config --global color.status auto
git config --global color.diff auto
git config --global color.branch auto
git config --global color.interactive auto
git config --global color.log auto

分支重命名

git br -m [old_br] [new_br]

查看其他分支指定文件

git show BRANCH:PATH

代码提交统计

# 查看个人提交的代码行数统计
git log --since="2023.04.03" --until="2023.04.07" --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 }' -

# 查看项目每个人提交的代码行数统计
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --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 --pretty='%aN' | sort | uniq -c | sort -k1 -n -r

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值