# 查看本地分支列表
git branch
# 查看远程版本库分支列表
git branch -r
# 查看本地与远程所有的分支列表
git branch -a
# 从当前分支创建新的dev分支
git branch dev
# 删除dev分支
git branch -d dev
# 删除远程dev分支
git push origin --delete dev
# 重命名分支
git branch -m dev dev1
# 从当前分支拉出新的分支dev
git checkout -b dev
# 从远程分支拉取到本地
git checkout -b dev origin/dev
# 根据tag拉出新的分支
git checkout -b branch_name tag_name
# 把新建的分支push到远端
git push origin dev
# 切换到dev分支
git switch dev
git checkout dev
# 查看关联远程的分支信息及权限
git remote -v
# 删除关联的远程分支origin
git remote remove origin
# 添加远程分支关联
git remote add origin https://xxx.git
# 将远程分支覆盖本地代码
git fetch --all
git reset --hard origin/master (这里master要修改为对应的分支名)
git pull
查看状态与日志
# 查看当前工作区状态
git status
# 查看提交记录
git log
# 查看所有的log
git reflog
# 查看feature1分支是否push到远程分支
git log feature1 ^origin/feature1
查看差异
# 工作区 vs 暂存区
git diff
# 暂存区 vs 本地版本库(最近一次commit)
git diff --cached
# 工作区 vs 本地版本库(最近一次commit)
git diff HEAD
# 工作区 vs 指定commit-id的差异
git diff commit-id
# 暂存区 vs 指定commit-id的差异
git diff --cached commit-id
# commit-id-1 vs commit-id-2
git diff commit-id-1 commit-id-2
git reset --hard commit_id
# 放弃工作区修改(如果是所有文件把文件名改成 . 点就行)
git checkout -- xxx.js
# 放弃暂存区修改,回退到Unstaged状态
git reset HEAD .
# 回退提交
git reset HEAD@{index}
参数--mixed
:为默认值,等同于git reset
。 将文件回退到工作区
,此时会保留工作区
中的文件,但会丢弃暂存区
中的文件;--soft
:将文件回退到暂存区
,此时会保留工作区和暂存区
中的文件;--hard
:将文件回退到修改前
,此时会丢弃工作区和暂存区
中的文件;
# 添加几个文件到暂存区
git add xx.js yy.js
# 添加所有文件到暂存区
git add .
# 提交暂存区的修改到本地版本库
git commit -m "本次修改的comment"
# push到远程仓库分支 origin-关联的仓库名 master-分支名
git push origin master
# 合并dev分支修改到当前分支
git merge dev -m "merge from dev"
# 合并某一次提交到当前分支(产生一次提交,需要push)
git cherry-pick fsa0dsads
# 强制将远程分支覆盖本地分支
git fetch --all
git reset --hard origin/master
git pull
# 非快速合并 会产生一条commit
git merge dev --no-ff -m "merge dev"
常在河边走,哪有不湿鞋;人在江湖飘,哪有不挨刀!
事故1:刚提交了一次代码,突然发现少了一个空格或多了一个分号,类似这些小问题又得重新提交一遍,如果按正常的提交又会产生一次提交记录,这样会多出很多的提交记录,我们是拒绝的,那怎么做呢?
一般的小伙伴会想到先提交一次再用git rebase -i
通过变基来合并提交,这也可以,但是我想大家隆重介绍比它快一万倍的--amend
,See:
git add .
git commit --amend --no-edit
上面的命令是在前一次提交后,发现有小问题然后就再提交一次,只需要加个参数--amend
就会自动合并上一次的提交,--no-edit
参数是不需要修改注释,如果需要修改就不加这个参数就行了。
需要注意的是--amend
不要滥用,如果一直用这个来合并,最终就只有一条提交记录了,如果是别的功能修改就不要使用--amend
让它生成新的提交记录。
事故2:新的开发任务还没编写完成,本地有部分代码还不能提交,而需要马上解决一个bug,此时该怎么做?
这里需要用到git stash
命令,它的作用就是保存当前的工作区
与暂存区
的状态,把当前的工作隐藏起来,等以后需要的时候再恢复,git stash
这个命令可以多次使用,每次使用都会新加一个stash@{num},num是编号
# 隐藏当前的工作区与暂存区,可以切换到别的分支继续工作
git stash
# 查看被隐藏的stash列表
git stash list
# 恢复最新的stash到工作区(原来暂存区的需要重新进行add暂存)
git stash pop
# 删除所有的stash
git stash clear
先保存当前工作区和暂存区的修改,此时的工作区会显示上一次提交后的样子,修改和暂存的文件被隐藏了 ,这时候就相当于working tree clean状态,可以切换到别的分支去修改bug或紧急任务,等那边的问题解决了,再回到这个分支来执行git stash pop
恢复之前的工作到工作区,注意之前保存到暂存区的需要重新暂存。
注意:工作区有文件已修改没有添加到暂存区或没有提交,都不能切换到别的分支。
事故3:本来应该提交到新分支的东西,提交到了主分支!
# 从当前状态的主分支新建一个分支
git branch new-master
# 取消主分支的最新一次提交
git reset HEAD~ --hard
# 切换到新分支
git checkout new-master
注意:如果你已经推送到了远程分支,那一切都晚了。如果你已经修改了别的文件,那第二行应该是git reset HEAD@{number}
,而不是HEAD~
,以回到最初犯错的时间和地点。
事故4:提交到了错误的分支上!
解决办法1:git stash
保留现场
# 取消最新的提交,保留工作区现场原状
git reset HEAD~ --soft
# 保存现场到stash
git stash
# 切换到正确的分支
git switch dev
# 还原现场
git stash pop
# 这里可能会有冲突,如果有就解决下冲突
# 然后再添加暂存,提交
git add .
git commit -m "balabala..."
解决办法2:cherry-pick
(摘樱桃🍒) 喜欢🍒吗?
# 假设应该提交到dev分支的代码,提交到了master分支
# 切换到正确的分支
git branch dev
# 把错误的分支的最新提交🍒摘过来
git cherry-pick master
# 回退错误分支的代码
git switch master
git reset HEAD~ --hard
事故5:git pull 时提示因某些文件冲突不能合并
其实这个是常规操作,因为有很多小伙伴一起编辑,所以文件冲突是正常的,这时候有两个情况:
1.你想保留你自己的本地修改
处理方案:
git stash
git pull origin dev
git stash pop
接下来解决文件冲突,再提交即可
2.你不想保留自己的修改
处理方案:
git reset --hard
git pull origin dev
事故现场未完待续。。。
详细Git教程,参考专栏:传送门
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/zy1281539626/article/details/115564143
内容来源于网络,如有侵权,请联系作者删除!