深入git学习

git在项目的协同开发上起到了很关键的作用。
下面说一下git常用的一些命令:

clone远程分支:git clone 分支地址
创建及切换分支:git checkout -b 分支名
添加文件到分支上:git add .
提交文件到本地:git commit -m '提交说明'
提交到远程分支:git push
拉取远程分支:git pull
查看本地分支:git remote
查看提交日志(查看版本号):git log
回滚代码:git reset --hard 版本号(会修改历史提交中的这个版本)
回滚代码:git revert -n 版本号(不会修改历史提交中的这个版本)
    git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit看似达到的 
    效果是一样的,其实完全不同.

    上面我们说的如果你已经push到线上代码库, reset 删除指定commit以后,你git push可能导致一大堆冲 
    突.但是revert 并不会.

    如果在日后现有分支和历史分支需要合并的时候,reset 恢复部分的代码依然会出现在历史分支里.但是 
    revert 方向提交的commit 并不会出现在历史分支里.

    reset 是在正常的commit历史中,删除了指定的commit,这时 HEAD 是向后移动了,而 revert 是在正常的 
    commit历史中再commit一次,只不过是反向提交,他的 HEAD 是一直向前的.
分支合并(a分支合并到master分支上):在master上进行git merge a命令

# 2019.9.22
在公司最近的工作中由于过往对git使用过于简单导致没有深入去认识git的原理和使用,最后的结果就是在和同事的配合之间出现了,大量的非技术问题且在这些问题上花费了大量的时间。
首先先给大家推荐一个git原理的中文网站
下面是几个git相关的原理性的东西理解这几个概念有助于更好的学习和使用git
git的文件形式主要有三种
已提交committed(已经commit到本地)
已修改modified(ctrl+s保存了修改的代码)
已暂存staged(代码写完发现有冲突,先暂存起来)
git的工作区域分三种(可与三种文件形式对应起来)
工作目录(对应文件形式已修改)
暂存区(已暂存的文件)
git仓库(对应文件形式已提交)
git的两种文件形式
已跟踪(仓库中已有的文件)
未跟踪(仓库中没有的文件例如新建文件)
git的4个生命周期
untracked(未跟踪即没有add的文件)
unmodified(未修改即在仓库中但是没有做过任何修改的文件)
modified(已修改即文件已在仓库中且修改但是还没有add的文件)
staged(暂存即已经add但是还未commit提交的文件)


变基和merge的区别
git变基将某一分支的改动迁移到另一分支和合并分支是一个意思(例如要将a分支的修改内容合并到master,这时候要在a分支上执行变基)。
git合并分支是在master分支执行合并命令(例如要将a分支的修改内容合并到master,这时候要在master分支上执行合并命令)。
变基会使得提交记录看起来更加整洁,这是优点也是一个不足。


常用的git命令

git命令
git status查看文件状态

git add <file>添加到暂存区

git commit -m '说明'提交到本地

git push提交到远程仓库

git commit --amend重新提交前一个提交

git reset <--soft | --mixed | --hard> <file>撤销暂存区的文件
    hard重置stage区和工作目录
    soft保留工作目录,并把重置 HEAD 所带来的新的差异放进暂存区
    mixed保留工作目录,并清空暂存区(默认)

git checkout <file>撤销未暂存的修改文件

git checkout <branch> <file>将某个文件回退到指定提交

git log日志(hash码)

git remote -v远程仓库地址

git remote add <name> <gitUrl>添加远程仓库

git fetch <name>拉取远程仓库

git push <remote name> <branch name>推送到某远程仓库的某一个分支

git remote show <remote name>查看某个远程仓库

git remote rename <old remote name> <new remote name>修改仓库名

git tag -a <name> -m '说明'创建附注标签(比如版本号)

git tag <name>创建轻量标签(比如版本号)

git tag -a v1.2 <版本hash值>创建历史提交的标签

git push <remote name> <推送的标签>推送标签到远程仓库

git push <remote name> --tags推送所有表签到远程仓库

git tag -d <name>删除标签

git push origin :refs/tags/<name>删除远程仓库标签

git branch <name>创建分支

git checkout<name> 切换分支

git checkout -b <name>创建并切换到分支

git branch -d <name>删除分支

git push <remote name> --delete <name>删除远程分支

git branch --merged合并到当前分支的分支

git branch --no-merged没有合并到当前分支的分支

git rebase <name>变基操作(当前分支合并到name分支和merge的当前分支不同)

git merge <name>将name分支合并到当前分支

下面是我工作中又遇到的情况:
情况一:当和同事协同开发的使用同时修改到了同一个文件的时候比如router路由时会发生冲突这时候要善于使用git status查看文件状态来解决具体的冲突。

这里推荐大家一个git可视化工具Sourcetree,这个工具非常好用但是国内不好下载需要翻墙。
持续更新中...
2020.12.17

git回退版本
  结果线上被强推的版本回到上面重置提交的这个版本
  1.reset(不推荐):线上该次提交前的提交记录全部都没有
    1.sourse tree
      1.重置提交
      2.推送 -> 强制推送
    2.命令行
      1.git log 获取commitid
      2.git reset --hard commitID 重置到某次提交
      3.git push origin commitID --force
  2.revert(推荐):线上的提交记录还在并生成一个新的提交记录
    1.sourse tree
      1.回滚移交
      2.提交
      3.推送
    2.命令行
      1.git log
      2.git revert -n commitID
      3.git commit -m xxxx
      4.git push


检出:改变HEAD指针的指向
  git checkout commitId/branch 检出分支或某次提交


重置提交
  git reset --soft,--mixed,--hard commitId
  --soft:保留工作目录和暂存区中的内容,并把重置 HEAD 所带来的新的差异放进暂存区。
  --mixed:保留工作目录,并清空暂存区
  --hard:重置stage区和工作目录

2021.7.7

git暂存功能:该操作将当前还没有暂存的文件暂存到脏目录中,脏目录中的文件不会记录到git记录中。
应用场景:当我们开发某一功能,产品狗需要我们优化某个功能,但是我们暂时不希望提交当前的代码就可以使用暂存功能,等功能优化好后再将脏目录的修改取出来继续开发。

git stash save <name> 保存当前的修改到脏目录的<name>中
git stash list 查看脏目录列表

取出脏目录中的修改
1.git stash pop stash@{index} 取出索引为index的脏目录,并且删掉这条脏目录
2.git stash apply stash@{index} 取出索引为index的脏目录,但是保留这条脏目录

git stash drop stash@{index} 删除索引为index的这条脏目录
git stash clear 删除所有的脏目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值