git入门(二)git的使用

本地仓库命令

1.历史 log/relog

commit后才算一个历史版本,仅add不算

1.1 log

# 从最新提交开始,显示所有提交记录(hash,作者信息,标题和时间)
git log
# 输出概要日志,等于git log --pretty=oneline --abbrev-commitgit log --oneline

# 查看
git log [--reverse|--oneline]
## --reverse 按时间正序排列的信息
## --oneline 每个提交在一行内显示
## --graph 提供类似 GUI 工具的 log 展示
## --all 展示所有
## --grep 过滤 --grep='homepage'
## --author 显示某用户的提交 --author="username"
## n 指定最近几个提交可带 -/+ 数字 git log n 5
## -p 显示某文件的所有修改 git log -p <file>
git log --oneline -5

git log --graph --date=relative --pretty=tformat:'%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%an %ad)%Creset'

查找 Commits 和更改

# 通过 commit 信息查找 (所有分支)
git log --all --grep='<search term>'
# 通过 commit 信息查找 (包含 reflog)
git log -g --grep='<search term>'

# 通过更新的内容查找
git log -S '<search term>'
# 通过日期范围查找
git log --after='DEC 15 2019' --until='JAN 10 2020'
                               

1.2 reflog

git reflog 记录所有行为,包括 rebase,merge, reset

当不小心硬回滚或变基错误,都可找到commit,然后回滚。只在本地有用。

git reflog
## reflog查看本地以往版本号
git reflog -5

2.搜索 grep

# 从当前目录的所有文件中查找文本内容
git grep "Hello"
# 在某一版本中搜索文本
git grep "Hello" v2.5

3.分支 brand

3.1 初探

在学习Git分支前,先从git的目录树入手。

$ tree -a .git
.git
├── ......
├── HEAD
└── refs
├── heads
│   └── master
├── remotes
│   └── origin
│       └── HEAD
└── tags

refs记录当前分支的引用信息,含本地、远程分支,标签。

heads记录本地所有分支,remotes和HEAD一样,指向对应某远程分支。

cat .git/refs/heads/mastera16b5382a9b646a...

hash值是commit节点hash值。HEAD存储当前在哪个本地分支。查看内容:

cat HEADref: refs/heads/master

在本地master上。通过 git branch 创建其他分支。

注:本地分支未被跟踪的文件,所有分支均可看到该文件,且其他分支都可修改提交,但commit后就只能由commit分支查看

3.2 创建

master分支需先commit才能生成master分支,否则报错:fatal: Not a valid object name: 'master'.

## 创建分支
git branch feature/dev

## 本地关联远程分支
git branch --set-upstream-to=origin/xxx
git branch --set-upstream-to origin xxx

3.3 查看

## 查看分支
git branch [-r][-a]
## -r 查看远程分支
## -a 查看远程全部分支,白色表本地有,红色仅远程存在

3.4 修改

## 修改分支
git branch [-M old new]
## 修改分支名称

3.5 删除

## 删除分支
git branch [-d branchName]
# 删除远程仓库不存在的分支
git fetch -p
# 移除所有包含 `greenkeeper` 的分支
git fetch -p && git branch --remote | fgrep greenkeeper | sed 's/^.\{9\}//' | xargs git push origin --delete

3.6 对比

## 查看我的分支和 master 的不同
git diff master..my-branch  

3.7 切换 checkout/branch

可基于分支,提交,标签切换到对应记录。一般用来热修复或老版本加新特性。

# 切换到分支
git checkout feature/dev 	
# 创建并切换分支,等价 git branch dev && git checkout dev
git checkout -b dev

git checkout --track origin/feature-test
# 放弃单文件修改,注意不要忘记中间的"--",不写就成了检出分支了!
git checkout -- filepathname
# 放弃所有文件修改
git checkout .
# 跳到之前分支
git checkout -

# 切换到其他分支并查看分支信息
git branch -vv* feature/dev  a16b538 
#加入到代码库中,观察objects目录变化  feature/wuya 
#a16b538 加入到代码库中,观察objects目录变化  master       
#a16b538 加入到代码库中,观察objects目录变化

分支当前的指针指向最近一次commit节点。谁创建的分支,就沿用谁指针。

注:未被放入代码库的文件在分支切换时被抛弃,造成严重后果。

3.8 合并 merge/rebase

分支合并有:merge和rebase两种。两者都从一个分支获取并合并到当前分支。

3.8.1 merge

merge:自动创建新commit,如果冲突,需修改后重新commit。

每次都记录详细的commit,但commit频繁时,分支较乱。

3.4.8.2 rebase

rebase:找公共节点,直接合并前commit历史,也叫变基。得到简洁的分支历史,去掉merge commit。但如果合并出问题,无痕迹,不好定位。

  • git rebase --abort:放弃合并,回到rebase前状态。
  • git rebase --continue:结合"git add 文件"命令,一步步地解决冲突。
  • git rebase --skip:引起冲突的commits丢弃掉。

例1:引用网上归纳的git rebase工作流:
 

git rebase while(存在冲突) {
  #找到当前冲突文件,编辑解决冲突    
  git status    # 显示工作路径下已修改的文件
  git add -u    
  git rebase --continueif( git rebase --abort )
  break;
}

注:最好不在公共分支用rebase,如果前后基本没人动分支,推荐rebase。

例2:想要 rebase 最近 3 个提交:

  • git rebase -i HEAD~3

  • 保留第一行 pick,剩余提交替换为 squash 或 s

  • 清理提交日志并保存

pick 64d26a1 
feat: add index.jss 45f0259 
fix: update index.jss 8b15b0a 
fix: typo in index.js

git 提交分支

git add .git commit --fixup HEAD~1 #或用哈希值(fed14a4c)
git rebase -i HEAD~3 --autosquash #保存并退出文件(VI输:wq)

rebase 时在每个提交上执行命令

如果特性多,一个分支有多个提交。或测试失败,希望找到导致测试失败的提交。用 rebase --exec 命令在每个提交上执行命令。

# 在最近3个提交上运行 `npm test` 命令
git rebase HEAD~3 --exec "npm test"

3.9 分支

3.9.1分支合并

# 将dev合并到master
git checkout master
git merge dev
git merge --no-ff branchName

合并完后,删除dev分支

#删除dev分支时,注意当前所在的分支不能是dev分支
git branch -d dev			#本地删除分支dev
git branch -D issues1234  		#本地强删分支issues1234
git push origin  :issues1234  #推到远程

3.9.2部分合并

从多个分支挑取部分 commit 合并到同个地方。

类似变基,挑的 commit 若无冲突则追加。有就中断,解决后 --continue

git cherry-pick commit-sha1
git cherry-pick master~4 master~2
git cherry-pick startGitSha1..endGitSha1

 3.9.3总结

常从master创建新分支,具体操作如下:

# master创建新分支:
git checkout master
git checkout -b issues1234  	#从master分支创建issues1234分支
git push origin issues1234
git add ..
git commit -m "***"
git push origin issues1234

注意:将本地分支branch1推到远端的branch2操作步骤:

git push origin branch1:branch2

总结

  • master - 主分支,用于发布生产环境,且只能从其他分支合并,不能修改。
  • develop - 主开发分支,用于部署到测试环境(FAT),包含发布下个 release 代码,主要从其他分支合并,如 feature 分支。
  • feature - 主要开发新功能,开发完成后合并 develop 分支进入下个 release。一旦该需求上线,便将其删除。
  • release - 当发布新 release 时,基于 Develop 分支创建 release 分支,完成 release 后,合并到 master 和 develop 分支。
  • hotfix - 在 master 发现新 Bug ,需创建 hotfix, 完成 hotfix 后合并回 master 和 develop 分支,hotfix 的改动进入下个 release
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值