赞
踩
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 删除所有的脏目录
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。