工作以来常用的git命令总结

本文详细列举了Git的各种常用命令,包括配置用户信息、创建和管理仓库、查询与追溯提交历史、常规操作如提交、拉取和推送,以及重命名分支、打tag、合并分支等进阶操作。此外,还介绍了如何处理冲突、同步远程分支、手动合并提交和生成patch文件等高级技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置工具

查看配置:

$ git config user.name

$ git config user.email

设置当前仓库的user.name/user.emali:

$ git config user.name "[name]"

$ git config user.emali "[email address]"

对所有本地仓库的用户信息进行配置:

$ git config --global user.name "[name]"

$ git config --global user.email "[email address]"

启用有帮助的彩色命令行输出:

$ git config --global color.ui auto

设置git默认编辑器为vim:

$ git config --global core.editor "vim"

备注:如果当前仓库未设置user.name/user.email则采用全局的user.name/user.email,否则当前仓库的user.name/user.email会覆盖全局的user.name/user.email

创建仓库

本地创建一个仓库:

$ git init

使用以下命令将本地仓库与一个 GitHub 上的空仓库连接起来:

$ git remote add origin [url]

从远程拉取仓库下来:

$ git clone [url]

查询和追溯

git查看某次commit属于哪个分支:

$ git branch --contains <commit id> //本地分支

$ git branch -r --contains <commit id> //远程分支

问责机制,查看某一个文件是谁操作提交的:

$ git blame xxxx文件

查看分支创建以及一些操作对应的动作和时间:
$ git reflog --date=iso 分支名

查看某一个文件的提交记录:

$ git log --pretty=oneline 文件名

$ git show [commit id] //显示修改的具体修改历史

常规操作

查看当前分支状态:

$ git status 

提交代码正确流程:

$ git add +要提交的文件

$ git commit -m"提交备注内容"

$ git pull 拉取远程git仓库代码 如果本地有缓存文件 建议使用 git pull --rebase(防止和别人代码冲突)

$ git push 将代码推送到远程git服务器(如果未与远程服务器建立连接 例如将本地代码推到远程dev分支 使用 git push origin/dev)

查看本地代码于远程版本代码修改内容:

$ git diff 

查看当前提交git的记录:

$ git log --graph 

查看分支:

$ git branch -a (远程+本地)

$ git branch 查看本地所有分支

$ git branch -r 只查看所有远程分支


重命名本地分支:
$ git branch -m oldbranchname newbranchname

基于某次tag拉新分支: 

$ git checkout tag名字  -b 新分支名字

基于某次commit拉新分支: 

$ git checkout commit-id  -b 新分支名字

打tag相关:

$ git tag + tag名称 //给当前分支的最新提交打tag 

$ git tag + tag名称 + commitid //给指定的commit 打tag

$ git tag -a tag名称 -m"备注信息"

$ git push --tag // 推送本地所有tag到远程

$ git push origin tag名称 // 推送指定tag到远程

$ git tag -d tag名称 //删除本地tag

$ git push origin --delete tag名称 //删除远程tag

本地同步远程tag,解决远程删除了tag本地还有的问题(请谨慎操作):

$ git tag -l | xargs git tag -d #删除所有本地tag 

$ git fetch origin --prune #从远程拉取所有信息

一次性cherry-pick多次提交到当前分支:

$ git cherry-pick 77b37a79559191d0ecb4572df38ed70a50aff36c..8a19eef61e258072f7a56385419385ebd8a3e0d0
 (不含含77b37a79559191d0ecb4572df38ed70a50aff36c提交,左开右闭规则)

git消除 ^M 的方法:

$ git config --global core.whitespace cr-at-eol

将当前本地分支跟踪远程分支状态:

$ git branch --set-upstream 本地分支名 origin/远程分支名

删除本地分支和远程分支:

$ git branch -D 要删除的本地分支名字

$ git push --delete origin 要删除的远程分支的名字

重命名本地分支和重命名远程分支:(在Git中重命名远程分支,其实就是先删除远程分支,然后重命名本地分支,再将本地推到远程)

$ git brance -m dev developer

$ git push origin developer

查看当前仓库的git远程地址:

$ git remote -v

分支合并:(https://blog.youkuaiyun.com/weixin_42310154/article/details/119004977)

$ git merge //适用于往公共分支上合代码(推荐使用Merge,方便查看历史)

$ git rebase //适用于拉公共分支最新代码(不推荐使用,虽然看起来简洁但是改变了基底,容易颠倒提交顺序)

进阶操作

本地将某次提交后的提交内容合并为一次提交:(https://blog.youkuaiyun.com/al_assad/article/details/81145856)

$ git rebase -i ff582608 //将ff582608后面的提交合并为一次
(选一次提交内容为pick, 其他都改为fixup忽略提交信息即可,保存后对commit信息不满意可以git commit --amend修改)

查看本地的git操作:

$ git reflog 可以查看本地用户对git分支的操作记录 可以选择性的回滚操作

库迁移命令:
例如将本地服务器的代码代码迁移到gitlab上(完全迁移 将所有提交记录都推上去) 

$ git clone --bare git4@192.168.138.66:xxx.git //找个空位置重新拉一份远程新代码

$ git push --mirror http://192.168.138.251:xxx.git //将所有记录推到新的远程服务器

将远程分支和本地分支同步-删除远程不存在而本地git branch -a还显示的分支:

$ git remote show origin 

$ git remote prune origin

撤销误commit的内容(常用于临时切换到其他分支时, 保存当前分支的修改,待切换回来后恢复改动继续编辑):

$ git reset --soft + 上一次提交的commit id

修改commit的备注提示内容:

$ git commit --amend 要修改的commit-id
(如果默认编辑器不是vim 可以使用下面的命令将编辑器设置为vim 
sudo update-alternatives --config editor 选择默认的编辑器 
修改完之后如果是远程分支的内容 需要 git push -f 强压上去(需谨慎操作!)
如果本地commit的,只需要继续git push 推到远程即可)

将远程回退到某一次提交(需要强压,需谨慎操作!):

$ git reset --hard <commit id>

$ git push -f origin 分支名

或者可以将版本分支回退到某一次commit,然后删除远程分支,然后再重新push origin 本地分支到远程

对比两个分支差异:

$ git log branch1...branch2  //不知道谁提交的多谁提交的少,单纯想知道有啥不一样时候使用

$ git diff branch1 branch2 --stat //显示出branch1和branch2中差异的部分

$ git diff branch1 branch2 //显示出所有有差异的文件的详细差异

$ git diff branch1 branch2 具体文件路径 //显示指定文件的详细差异

$ git log branch1 ^branch2 //查看branch1分支有,而branch2中没有的log

$ git log branch1..branch2 //查看branch2中比branch1中多提交了哪些内容

$ git log -lefg-right branch1...branch2 //在上述情况下,在显示出每个提交是在哪个分支上:
(注意 commit 后面的箭头,根据我们在 –left-right branch1…branch2 的顺序,左箭头 < 表示是 branch1 的,右箭头 > 表示是branch2的)

手动将git 的某一次提交合入到另一分支的两种方式:

方式一:(适用于同一个仓库下不同分支之间操作)
    1.切到被合入的分支
    2.git cherry-pick + 将要被合入分支的某次commitId (有冲突解决冲突, 解决冲突后git add 冲突文件, 最后git cherry-pick --continue)

方式二:(适用于不通仓库之间合并改动时操作)
    参考https://blog.youkuaiyun.com/liuhaomatou/article/details/54410361
    1.将某次的提交导出到patch文件
    $ git format-patch + commitId 将这次提交之后的所有提交生成patch文件(且不包含当前提交)
    2.将patch文件打入补丁
        先检查patch文件:git apply --stat newpatch.patch
        检查能否应用成功:git apply --check newpatch.patch
        打补丁:git am --signoff < newpatch.patch(上面两个步骤可以忽略)
        如果有问题可以使用:git apply PATCH --reject 

git 生成 patch文件的相关命令:

$ git format-patch -M master //当前分支所有超前master的提交

$ git format-patch 4e16 --4e16指的是commit名 //某次提交以后的所有patch

$ git format-patch --root 4e16 //从根到指定提交的所有patch

$ git format-patch 365a..4e16 --365a和4e16分别对应两次提交的名称 //某两次提交之间的所有patch

$ git format-patch –n 07fe --n指patch数,07fe对应提交的名称 //某次提交(含)之前的几次提交

$ git format-patch -1 07fe //故,单次提交即为

$ git format-patch生成的补丁文件默认从1开始顺序编号,并使用对应提交信息中的第一行作为文件名。如果使用了-- numbered-files选项,则文件名只有编号,不包含提交信息;如果指定了--stdout选项,可指定输出位置,如当所有patch输出到一个文件;可指定-o <dir>指定patch的存放目录

仓库变更远程地址的两种方式:

$ vim .git/config文件,修改url //方式一

$ git remote set-url origin 新的远程git服务器地址 //方式二

git操作仓库带有子模块:

1.克隆仓库包括所有子模块:git clone --recurse-submodules https://github.com/frida/frida.git

2.子模块的定义在当前仓库的.gitmodules文件

3.如果clone时忘了下子模块或者clone所有子模块时有失败时候该怎么办 : 执行 git submodule update --init 直到没有出错信息

4.检查各子模块状态:git submodule status

5.拉取远程最新改动,包括所有子模块:git pull --recurse-submodules

6.当切换到某一个tag时,要求所有的子模块也跟着切换的命令:git checkout tagxxxx 然后 git submodule update --recursive

输出当前git仓库的分支和最新的一次commit id:(可用于写shell脚本等)

$ git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3 //输出当前分支名

$ git rev-parse --short HEAD 2>/dev/null //输出最近一次提交的commit id
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值