git相关操作
获取用户信息
git config user.name
git config user.email
git config --global user.name "your name"
git config --global user.email "your email"
克隆项目
# clone with SSH
git clone git@git.dev.sh.ctripcorp.com:ottd/***.git
# clone with HTTP
git clone http://git.dev.sh.ctripcorp.com/ottd/***.git
# clone with SSH
git clone git@git.dev.sh.ctripcorp.com:ottd/ottd-smart-business-component.git
# clone with SSH
git clone git@git.dev.sh.ctripcorp.com:ottd/ottd-smart-business-component.git
查看提交记录
git log --author=“author”
git log --pretty=oneline # short,full 和 fuller
git log --pretty=format:"%h - %an, %ar : %s" # 自定义格式
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 --date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
从另一个分支上抽取另一个分支上的commit
# master 的commit有:commit1, commit2, commit3, commit4
# master-other 的commit有: commit5, commit6, commit7
# 仅仅将commit5拉出来放到master中,可以使用一下命令,后面的六位数,是commit5的hash码
# 在master分支上做以下命令
git cherry-pick 4589b6c
本地创建新分支并推送到远程
git checkout -b dev_new
git push
## 控制台提示
## fatal: The current branch 8.3.1_fix_additional_choose_copies has no upstream branch.
## To push the current branch and set the remote as upstream, use
## git push --set-upstream origin dev_new
git push --set-upstream origin dev_new
git push -u origin dev_new
删除本地分支/远程分支
git branch -a / git branch -all # 查看所有分支
git branch -l # 查看本地分支
git branch -d branchname / git branch --delete branchname # 删除本地分支,未合并的会报错
git branch -D branchname # 删除本地分支,哪怕没有被合并到其他分支
# 控制台输出
# Deleted branch 8.3.1_order_option_price_error (was 1a85a6f63a).
git branch -r # 查看远程分支
git push --delete origin branchname / git push -d origin branchname # 删除远程分支
git push origin :branchname # 删除远程分支
# 控制台输出
# To git.dev.sh.ctripcorp.com:ttd/ttd-mobile-activity.git
# - [deleted] 8.3.1_for_testuat
对远程分支源的增删,提交,追踪
# git remote -h 该命令会显示git remote 大多数操作项,可以优先从这获取。
# 查看当前源
git remote -v
# 添加新的源
git remote add originnew git@github.com:woden0415/woden0415.github.io.git # git remote add 源的名字 源的地址
# 删除之前创建的源
git remote remove originnew
# 提交
git push originnew branchname # 推到新的源地址,需要指定源和分支名
# 如果我们需要重新设置默认追送该怎么做呢?
# 首先查看当前的追踪情况
# 查看当前追踪,
git branch -vv
# 控制台输出
# master 3104634 [origin/master: behind 85] Merge branch 'dev-0320' into 'master'
# * master0413 c12d899 [origin/master0413] update
# *[是否为当前分支] 本地分支名 commit哈希 默认追踪的远程分支:追踪现状(还没有更新等等) commit说明
# 设置默认提交到新的源分支上
git branch --set-upstream-to=originold/master0413 master0413
#git branch --set-upstream-to=origin/<branch> master
# 控制台输出
# Branch 'master0413' set up to track remote branch 'master0413' from 'originold'.
# 通过git branch -vv查看
# master 3104634 [origin/master: behind 85] Merge branch 'dev-0320' into 'master'
# * master0413 c12d899 [originold/master0413] update
# 删除源
git remote remove originold
# 通过git branch -v查看是否删除掉
# 之前本地分支master0413 => originold/master0413,删除后,需要重新指定远程分支
合并多个提交为1个提交
# https://www.jianshu.com/p/964de879904a 具体内容看着篇
给分支添加描述信息
背景:快速迭代开发时,通常好几个分支共同进行。这时候规范的分支命名往往无法第一时间了解这个分支的内容。下面了解一下,如何给分支添加描述。
# git config branch.{branch_name}.description 《这里添加注释》
git config branch.feature/0520.description "5月20号新建的功能"
# 接下来就是查看描述了,自带的功能比较麻烦
# git config branch.{branch_name}.description
git config branch.feature/0520.description
# 添加一个git工具,在命令行里执行。
npm i -g git-br
# 执行完之后,在项目里输入git br,会显示当前所有的分支和对应的描述
git br
# 控制台显示内容如下:
# feature/0520 5月20号新建的功能
将分支的某一个提交合并到另一个分支上
# 将分支A的提交`fa6add49079e45bd20284e885ff19768bfce0aa2`提交合并到分支B上
git checkout B
git cherry-pick fa6add49079e45bd20284e885ff19768bfce0aa2
# https://blog.youkuaiyun.com/Dream_Weave/article/details/106046769
将分支的多个提交合并到另一个分支上
# 方法一
# 将分支A的commit (76cada,62ecb3](前开后闭,所以需要多往前写一个提交)合并到分支B上
git checkout A
git rebase --onto B 76cada 62ecb3 # 将76cada和62ecb3之间的提交合并到B上,不包括76cada
# 此时会创建一个备份 c1e1169,这个备份包括B所有和新增的(76cada,62ecb3]提交
git checkout B
git merge c1e1169
## 方法二
# commit1 oikdj1
# commit2 8kiju1
# commit3 7jujuh
# 将a分支的连续三个提交commit1~commit3合并到b分支上
# 在b分支上执行
git cherry-pick oikdj1..7jujuh # 表示 (oikdj1, 7jujuh]
git cherry-pick oikdj1^..7jujuh # 表示 [oikdj1, 7jujuh]
修改当前remote
的名称
git remote -v
# originnew git@git.aa.com:bb/cc.git (fetch)
# originnew git@git.aa.com:bb/cc.git (push)
# 如果我想修改此处的originnew为origin
git remote rename originnew origin
本地仓库关联远程地址
git remote add origin git@server-name:path/repo-name.git
git push -u origin master # 第一次推送master
git push # 之后可以只使用git push,默认追踪远程仓库和对应名字的分之
删除中间某几次提交
# 比如有一下几个提交 (上面的是最近的)
#
# 58211e7a5da5e74171e90d8b90b2f00881a48d3a
# 0fb295fe0e0276f0c81df61c4fd853b7a000bb5c
# 7753f40d892a8e0d14176a42f6e12ae0179a3210
# as6df7asd7fa7sdf7asdfasdf7afb7bcgfasd9a6
# 想要删掉 [0fb295fe0e0276f0c81df61c4fd853b7a000bb5c, 7753f40d892a8e0d14176a42f6e12ae0179a3210]
git rebase -i as6df7asd7fa7sdf7asdfasdf7afb7bcgfasd9a6
# 然后在控制台提示里,将
# [0fb295fe0e0276f0c81df61c4fd853b7a000bb5c, 7753f40d892a8e0d14176a42f6e12ae0179a3210]
# 前面的值改为 drop,然后保存提交
# git push -f 强推上去
# 其他人更新时,先回滚到最初节点 [as6df7asd7fa7sdf7asdfasdf7afb7bcgfasd9a6]
git reset --hard as6df7asd7fa7sdf7asdfasdf7afb7bcgfasd9a6
# 此时远程分支比本地要多一个commit [58211e7a5da5e74171e90d8b90b2f00881a48d3a] git pull就好了
git pull