Git学习笔记

本文记录Git工作中常用的基本命令,备忘。

1. Git初始化配置
# 配置用户信息
git config --global user.name "your name"
git config --global user.email "your email"

#配置别名,提交效率
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

# push推送凭证存储
 git config --global credential.helper store
# 查看配置
git config --list

设置的自定义配置,都存储在~/.gitconfig文件中。

2. 本地工作基本命令
# 比较工作目录中当前文件和暂存区域快照的差异
# 只显示尚未暂存的改动,而不是自上次提交以来所做的所有改动
git diff

#查看已暂存的将要添加到下次提交里的内容
git diff --staged 

# 取消暂存的文件
git reset HEAD <file>

# 撤销对文件的修改(会丢失本地的修改)
git checkout -- <file>

# 漏提交文件,或者修改上次提交注释
git commit --amend
3. 分支

HEAD指针,指向当前所在的本地分支, 可以理解为当前分支的别名。
切换分支后,HEAD指针指向就会改变。
创建一个新的分支,可以理解为创建了一个可以移动的新的指针。

# 创建分支,本质在当前提交对象上创建了一个指针
git branch <branchname>

# 查看各个分支当前所指的对象
git log --oneline --decorate

# 切换分支
(切换分支后,HEAD指针指向就会改变)
git checkout <branchname>

# 创建并切换分支
git checkout -b <branchname>

# 删除分支
git branch -d <branchname>

# 检查每一个分支的最后一次提交
git branch -v

# 检查尚未合并到当前分支的分支
git branch --no-merged

# 检查已经合并到当前分支的分支
git branch --merged

修复线上问题分支合并场景

  1. 从master拉出bug_fix分支: git checkout -b bug_fix
  2. 在bug_fix分支修复线上bug,确保修复OK
  3. bug_fix分支合并到master
    • git checkout master
    • git merge bug_fix
  4. bug_fix分支合并到dev(可选步骤)
    • git checkout dev
    • git merge bug_fix
  5. 删除bug_fix分支: git branch -d bug_fix

正常情况下,将bug_fix分支合到master并不可能产生冲突,合并是 fast-forward合并, 因为只是将master指针向前推移。
将bug_fix分支合并到dev分支, 如果dev分支此时有新的提交,那么合并就是recursive合并, 并且可能产生冲突。

4. 变基

变基(rebase) 是为了解决不同分支合并产生一次新的提交的问题。

假如将dev_1 分支 通过变基的方式何如到dev分支,进行如下操作:

git checkout dev_1
git rebase dev

git checkout dev
git merge dev_1

变基是将一系列提交按照原有次序依次应用到另一分支上,而合并是把最终结果合在一起

5. 远程仓库操作
#添加远程仓库
git remote add origin https://github.com/dchangjian/learning_git1.git

#推送至远程仓库, -u参数是为了把本地的master和远程master关联起来,以后操作就可以简化
git push -u origin master
git push origin master:master

#推送本地分支到一个命名不相同的远程分支
git push origin dev:dev1

# 查看远程分支
git remote -v 

# 显示当前处于哪个分支,哪些分支不在本地
git remote show origin

# 将远程修改拉取到本地,包括新的远程分支
git fetch

# 删除远程分支
git remote rm <>
6. 标签

Git标签分为轻量标签(lightweight) 和 附注标签(annotated)。
轻量标签是特定提交的引用,附注标签是存储在数据库中的一个完整对象。

# 查看所有标签
git tag

# 查看具体的标签信息
git show <tagname>

# 添加 -a 选项创建附注标签
git tag -a <tagname> -m <comment>

# 对过去的提交打标签
git log --pretty=oneline
git tag -a <tagname> <commit_id>

# 推送标签到远程分支
git push origin <tagname>
7. gitignore规则

有些目录或文件是没必要提交的,比如日志文件,开发IDE产生的一些文件等。这时需要配置.gitignore将其忽略。
一些基本的忽略规则如下:

# 忽略 build目录下的所有文件和目录,注意只忽略.gitignore文件所在目录下的build目录
/build

# 只要是mytest目录下的文件,都会被忽略
mytest/

# 忽略 doc目录下的*.txt, 不会递归忽略
doc/*.txt

# 递归忽略doc目录下的*.txt
doc/**/*.txt
8. 常见问题汇总
  • git本地重命名文件夹大小写并提交到远程仓库
    比如提交java代码时,不小心把java包名大写并提交了, 这是不符合java编程规范的。你需要这么做:

    1. 先将需要重命名的整个文件夹备份并修改成正确的名字(大小写修改)
    2. 执行命令: git rm -r <foldername>
    3. 将刚刚备份的文件夹又拷贝回原来的目录
    4. 执行命令: git add .
    5. 执行命令:git commit -m "xxx"
    6. 执行命令: git push origin <branchname>

    对于文件本身重命名大小写的情况,操作步骤类似: 备份-> git 本地删除-> 拷贝回来->git 添加到暂存区->git提交->git push

  • .gitignore文件更新后按照新规则应该忽略的文件还在远程服务器怎么办?
    这种情况也比较常见,比如java工程的build目录不小心提交到远程分支了,你发现这是没必要提交的,然后更新.gitignore文件,将build目录忽略,但是此时build目录已经被git管理了,所以忽略是无效的。
    按照如下方法完成:

    1. 进入本地git仓库根目录,执行命令:git rm -r --cached .
    2. 执行命令: git add .
    3. 执行命令: git commit -m "xxx"
    4. 执行命令: git push origin <branchname>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值