Git 实用命令项目基操【合集】

x33g5p2x  于2021-12-18 转载在 其他  
字(3.2k)|赞(0)|评价(0)|浏览(449)

1. 分支篇

  1. # 查看本地分支列表
  2. git branch
  3. # 查看远程版本库分支列表
  4. git branch -r
  5. # 查看本地与远程所有的分支列表
  6. git branch -a
  7. # 从当前分支创建新的dev分支
  8. git branch dev
  9. # 删除dev分支
  10. git branch -d dev
  11. # 删除远程dev分支
  12. git push origin --delete dev
  13. # 重命名分支
  14. git branch -m dev dev1
  15. # 从当前分支拉出新的分支dev
  16. git checkout -b dev
  17. # 从远程分支拉取到本地
  18. git checkout -b dev origin/dev
  19. # 根据tag拉出新的分支
  20. git checkout -b branch_name tag_name
  21. # 把新建的分支push到远端
  22. git push origin dev
  23. # 切换到dev分支
  24. git switch dev
  25. git checkout dev
  26. # 查看关联远程的分支信息及权限
  27. git remote -v
  28. # 删除关联的远程分支origin
  29. git remote remove origin
  30. # 添加远程分支关联
  31. git remote add origin https://xxx.git
  32. # 将远程分支覆盖本地代码
  33. git fetch --all
  34. git reset --hard origin/master (这里master要修改为对应的分支名)
  35. git pull

2. 查看篇

查看状态与日志

  1. # 查看当前工作区状态
  2. git status
  3. # 查看提交记录
  4. git log
  5. # 查看所有的log
  6. git reflog
  7. # 查看feature1分支是否push到远程分支
  8. git log feature1 ^origin/feature1

查看差异

  1. # 工作区 vs 暂存区
  2. git diff
  3. # 暂存区 vs 本地版本库(最近一次commit)
  4. git diff --cached
  5. # 工作区 vs 本地版本库(最近一次commit)
  6. git diff HEAD
  7. # 工作区 vs 指定commit-id的差异
  8. git diff commit-id
  9. # 暂存区 vs 指定commit-id的差异
  10. git diff --cached commit-id
  11. # commit-id-1 vs commit-id-2
  12. git diff commit-id-1 commit-id-2

3. 回退篇

  1. git reset --hard commit_id
  2. # 放弃工作区修改(如果是所有文件把文件名改成 . 点就行)
  3. git checkout -- xxx.js
  4. # 放弃暂存区修改,回退到Unstaged状态
  5. git reset HEAD .
  6. # 回退提交
  7. git reset HEAD@{index}

参数
--mixed :为默认值,等同于git reset。 将文件回退到工作区,此时会保留工作区中的文件,但会丢弃暂存区中的文件;
--soft :将文件回退到暂存区,此时会保留工作区和暂存区中的文件;
--hard :将文件回退到修改前,此时会丢弃工作区和暂存区中的文件;

4. 合并篇

  1. # 添加几个文件到暂存区
  2. git add xx.js yy.js
  3. # 添加所有文件到暂存区
  4. git add .
  5. # 提交暂存区的修改到本地版本库
  6. git commit -m "本次修改的comment"
  7. # push到远程仓库分支 origin-关联的仓库名 master-分支名
  8. git push origin master
  9. # 合并dev分支修改到当前分支
  10. git merge dev -m "merge from dev"
  11. # 合并某一次提交到当前分支(产生一次提交,需要push)
  12. git cherry-pick fsa0dsads
  13. # 强制将远程分支覆盖本地分支
  14. git fetch --all
  15. git reset --hard origin/master
  16. git pull
  17. # 非快速合并 会产生一条commit
  18. git merge dev --no-ff -m "merge dev"

5. 事故篇

常在河边走,哪有不湿鞋;人在江湖飘,哪有不挨刀!
事故1:刚提交了一次代码,突然发现少了一个空格或多了一个分号,类似这些小问题又得重新提交一遍,如果按正常的提交又会产生一次提交记录,这样会多出很多的提交记录,我们是拒绝的,那怎么做呢?

一般的小伙伴会想到先提交一次再用git rebase -i通过变基来合并提交,这也可以,但是我想大家隆重介绍比它快一万倍的--amend,See:

  1. git add .
  2. git commit --amend --no-edit

上面的命令是在前一次提交后,发现有小问题然后就再提交一次,只需要加个参数--amend就会自动合并上一次的提交,--no-edit参数是不需要修改注释,如果需要修改就不加这个参数就行了。
需要注意的是--amend不要滥用,如果一直用这个来合并,最终就只有一条提交记录了,如果是别的功能修改就不要使用--amend让它生成新的提交记录。

事故2:新的开发任务还没编写完成,本地有部分代码还不能提交,而需要马上解决一个bug,此时该怎么做?

这里需要用到git stash命令,它的作用就是保存当前的工作区暂存区的状态,把当前的工作隐藏起来,等以后需要的时候再恢复,git stash 这个命令可以多次使用,每次使用都会新加一个stash@{num},num是编号

  1. # 隐藏当前的工作区与暂存区,可以切换到别的分支继续工作
  2. git stash
  3. # 查看被隐藏的stash列表
  4. git stash list
  5. # 恢复最新的stash到工作区(原来暂存区的需要重新进行add暂存)
  6. git stash pop
  7. # 删除所有的stash
  8. git stash clear

先保存当前工作区和暂存区的修改,此时的工作区会显示上一次提交后的样子,修改和暂存的文件被隐藏了 ,这时候就相当于working tree clean状态,可以切换到别的分支去修改bug或紧急任务,等那边的问题解决了,再回到这个分支来执行git stash pop恢复之前的工作到工作区,注意之前保存到暂存区的需要重新暂存。

注意:工作区有文件已修改没有添加到暂存区或没有提交,都不能切换到别的分支。
事故3:本来应该提交到新分支的东西,提交到了主分支!

  1. # 从当前状态的主分支新建一个分支
  2. git branch new-master
  3. # 取消主分支的最新一次提交
  4. git reset HEAD~ --hard
  5. # 切换到新分支
  6. git checkout new-master

注意:如果你已经推送到了远程分支,那一切都晚了。如果你已经修改了别的文件,那第二行应该是git reset HEAD@{number},而不是HEAD~,以回到最初犯错的时间和地点。

事故4:提交到了错误的分支上!

解决办法1:git stash保留现场

  1. # 取消最新的提交,保留工作区现场原状
  2. git reset HEAD~ --soft
  3. # 保存现场到stash
  4. git stash
  5. # 切换到正确的分支
  6. git switch dev
  7. # 还原现场
  8. git stash pop
  9. # 这里可能会有冲突,如果有就解决下冲突
  10. # 然后再添加暂存,提交
  11. git add .
  12. git commit -m "balabala..."

解决办法2:cherry-pick(摘樱桃🍒) 喜欢🍒吗?

  1. # 假设应该提交到dev分支的代码,提交到了master分支
  2. # 切换到正确的分支
  3. git branch dev
  4. # 把错误的分支的最新提交🍒摘过来
  5. git cherry-pick master
  6. # 回退错误分支的代码
  7. git switch master
  8. git reset HEAD~ --hard

事故5:git pull 时提示因某些文件冲突不能合并

其实这个是常规操作,因为有很多小伙伴一起编辑,所以文件冲突是正常的,这时候有两个情况:
1.你想保留你自己的本地修改
处理方案:

  1. git stash
  2. git pull origin dev
  3. git stash pop

接下来解决文件冲突,再提交即可

2.你不想保留自己的修改
处理方案:

  1. git reset --hard
  2. git pull origin dev

事故现场未完待续。。。

详细Git教程,参考专栏:传送门

相关文章