常见git操作
常见git应用场景下的操作
-
本地初始化
git init
-
从远端拷贝新工程
git clone <url>
-
从远端拉取最新的代码
git pull
或git fetch; git merge origin/<branch_name>
将本地节点和远端节点合并
git pull —rebase
本地节点对远端节点rebase -
暂存
git add <file_name>
-
储藏
git stash
-
提交改动
git commit -m <comment>
-
推送至远端
git push
-
改变远端地址
git remote set-url origin <new_url>
-
创建新的分支
git checkout -b <new_branch>
-
切换分支
git checkout <branch_name>
(注意:如果远端有同名分支,git会自动做一个关联) -
删除分支
git branch -d <branch_name>
删除本地分支
git branch -D <branch_name>
强制删除本地分支,即使有还未提交到远端的修改
git push origin --delete <remote_branch>
删除远端分支 -
合并分支
git merge <another_branch>
-
变基
git rebase <another_branch>
-
回滚节点
git revert <commit_hash>
-
改变当前指针
git reset <commit_hash>
重置指针,不丢弃修改
git reset —hard <commit_hash>
重置指针,丢弃修改
git reset —soft <commit_hash>
-
开发一个新的需求
在master分支上
git checkout -b <dev_branch>
提交改动
合并主分支的改动
开发分支不建议进行rebase操作,因为如果有其他同学也在上面开发会很麻烦
-
修改线上bug的推荐姿势
在master分支上
git checkout -b <fix_branch>
提交改动
git commit -m <comment>
git rebase origin/master; git push
提MR
删除fix分支
-
提交日志可以这么写
comment可以有标题和正文,标题和正文之间空一行
这个在某些重大改动的提交上有用,标题可以简单描述一下,正文中详细写清楚改了什么
在git log里面只会看到标题,点进去详情才会看到正文
-
分支命名建议
线上修复的分支以hotfix_开头或者简单的就叫hotfix
开发分支以dev_开头
灰度分支以release_开头
-
在多个分支间切换
git status
查看当前分支的状态
git stash
如果有未提交的改动,用stash存起来 切换分支
-
多次stash后的处理
git stash list
可以用这个命令看到多次stash的结果 挑选你需要的储藏
git stash apply <stash_index>
(注意,apply不会删除stash本事,只会应用) 确定不需要stash了,可以用
git stash drop <stash_index>
丢弃 如果你很确定不会有问题,直接用
git stash pop <stash_index>
来直接应用并马上丢弃 如果你看了list之后还是不记得是哪个stash,可以在stash中创建一个新的分支:
git stash branch <new_branch>
然后你可以方便的操作这个分支
-
在错误的分支上提交了节点,并且在错误的节点后又提交了正确的节点
利用
git rebase -i
可以随意调换节点的位置 把错误的节点pick到正确的后面,切换到正确的分支上,这中间有可能需要处理冲突,但一般不至于,如果需要处理冲突需要确定一下后面的节点是不是对的
错误的节点用
git cherry-pick <commit_hash>
提交到正确的分支上 -
不小心reset —hard而且还没有推送到远端
假如你提交过节点,那么git会帮你记录
通过
git reflog
可以看到曾经出现在你电脑上的所有git节点,你可以reset到任何一个节点上去 -
将开发分支的改动提交灰度分支
首先应该保证合了master的代码变动
git merge origin/master
,中间可能需要处理冲突 然后
git checkout master
切换到master分支
git merge —squash <dev_branch>
把开发分支的代码变动移到master分支
git checkout -b <release_branch>
切换到新的发布分支
git commit -m <comment>
提交发布节点,此时,开发分支的代码变动已经完全包含在这个节点中 灰度
-
解决stash冲突
stash的冲突解决和merge及rebase相似,
如果想放弃解决,使用
git reset --hard
-
在错误的分支上stash pop,还解决了stash冲突
git在stash发生冲突的时候,不会因为用了pop把stash删掉,所以这里很简单的处理就是
git reset --hard
,然后到正确的分支上去做正确的事 -
正在开发的分支被协作者rebase
在开发分支当前节点创建一个新的分支
, 把当前分支自己的待提交修改都放到这个分支上
git rebase --onto origin/<dev_branch> dev_branch
这样你的改动就已经和远端的开发分支在一起了 -
.gitignore
模版
-
.gitkeep
可以用来保留空文件夹
-
可以减少犯错概率的工具
Sourcetree
Tig
Oh My Zsh