Git常用命令和操作
重要指令:工作流程图上的7个指令(clone+fetch+pul+checkout+add+commit+push)和2个常用指令(log+merge) 常用指令速查:
基本操作类:
git init
初始化仓库git-log
查看日志,这个命令很重要!!!!!!!!!!!!!!!!!!!git status
!! 查看本地仓库状态,可以查看是否add、commit
git add <文件名 | .>
!! 添加到暂存区git commit -m '注释'
!! 提交到仓库git reset --hard <commitID>
版本回退
分支类:
git branch [-vv]
!! 查看分支
git checkout <分支名>
!! 切换到某个分支git checkout -b <分支名>
创建并切换到某个分支(分支原来不存在)git merge <分支名>
合并指定分支到当前活跃分支远程操作
remote add
git fetch
git clone <远程地址> [本地文件夹]
!! clone远程仓库到本地git pull
!! 拉取远端仓库的修改并合并git push [--set-upstream] origin 本地分支名[:远程分支名]
!! 推送本地修改到远端分支 --set-upstream表示和远端分支绑定关联关系,只有第一次推送时才需要此参数
# 常见问题
# 带着修改切换分支
# SIT1:切换没有冲突
如果当前分支与切换的分支没有冲突
强制切换分支并保留修改
- 使用 checkout或者switch(Git 2.23+):
git checkout/switch -m <目标分支>
-m
参数表示在切换分支时保留当前的修改。
# SIT2:切换存在冲突
使用
git stash
暂存修改暂存当前修改
git stash
切换到目标分支
git checkout <目标分支>
恢复暂存的修改:
git stash pop
注意:
- 如果你有未跟踪的文件(即新创建但尚未
git add
的文件),默认情况下git stash
不会包含它们。你可以使用git stash -u
或git stash --include-untracked
来包含未跟踪文件。- 如果暂存后的修改与目标分支的内容冲突,Git 会提示冲突,你需要手动解决。
直接提交修改后将修改再次作用到你的分支上
将你的修改提交并切换分支后
通过git log查看提交的哈希值
将指定的提交应用到你的分支上
git cherry-pick <commit-hash>
Copied!丢弃修改后切换分支
丢弃已跟踪文件的修改
git reset --hard
丢弃未跟踪的文件
git clean -fd
切换分支
git checkout <目标分支>
# Git错误提交
# 错误提交到本地仓库
比如将我们的代码提交到master分支,而不是工作分支feature
可以使用Git cherry-pick
命令
通过git log查看本次提交的ID,然后先切换到正确的feature分支,通过cherry-pick 将修改内容复制到正确的分支上,
切换回master分支,用git reset --hard HEAD~1回退最近一次提交。
# 错误推送到远程仓库
首先,需要立即通知团队成员,避免他们同步到错误代码
然后使用
git revert
来撤销错误提交,revert比reset安全,因为它不会改变历史记录,只是添加一个新的提交来撤销之前的更改接着,在正确的分支上使用cherry-pick复制修改的内容,或者手动复制修改的内容,并提交到正确的分支
如果团队规模比较小,也可以考虑使用git reset --hard 和git push --force,但这需要团队所有成员的配合
不过force push是一个危险操作,会重写历 史,可能导致其他开发者的工作丢失,所以我一般更倾向于使用revert方法,除非确认 没有其他人在使用这个分支。
git cherry-pick <commit-hash>
:用于将提交的修改应用到另一个分支
git revert <commit-hash>]
:用于撤销已经推送的提交
git reset [--soft|--mixed|--hard] [HEAD~x|<commit-hash>]
:可以撤销已经推送的提交
- --hard 完全丢弃最近一次提交及其所有代码修改
- --mixed 撤销提交,并将修改移回工作目录
- --soft 撤销修改,并保留所有修改在暂存区
- HEAD~x 撤销前几次
# 预防错误提交的措施
规范好分支命名,比如feature/xxx
提交前使用git status和git branch检查当前分支
如果是个人/简单的项目,可以使用脚本来提交,这样可以通过脚本判断当前分支是否为自己的工作分支,从而减低错误提交的风险
但是如果是团队/复杂的项目,容易涉及到多分支合并、冲突,应该优先使用Git原生命令或者协作工具(如:xxx,我也没用过,自己举例)