浅浅记录一下git的一些常用指令

76 阅读3分钟

日常一键三连操作

git add . 添加所有文件到暂存区 (可以把 . 替换成具体的单个文件)

git commit -m "写点日志" : 提交暂存区的文件到本地仓库中

git push -u origin <分支名> : 将本地分支推到远程分支 (默认 master分支)

拉取远程代码

git pull origin <分支名> :将远程分支拉到本地分支 ( 慎用,你也不想你的几吨屎山就这样被覆盖了吧 ,手动狗头!)

git fetch :将远程代码拉取到本地仓库,再合并到工作区(推荐使用)

两者的区别:

相同点:

  • 在作用上他们的功能是大致相同的,都是起到了更新代码的作用

不同点:

  • git pull是相当于从远程仓库获取最新版本,然后再与本地分支merge,即 git pull = git fetch + git merge
  • 相比起来,git fetch 更安全也更符合实际要求,在 merge 前,我们可以查看更新情况,根据实际情况再决定是否合并

分支的增删改查

git branch <分支名> :增加分支

git checkout -b <分支名> : 创建并切换到该分支

git branch -d <分支名> : 删除分支

git push origin --delete <分支名> : 删除远程分支

git checkout <分支名> :分支切换

git branch -a : 查看本地和远程分支 (红色为远程分支)

git merge <分支名> :合并分支 (当前分支将别的分支合并掉)

回退版本(后悔药)

git reset --hard <提交id> : 比较暴力,直接回头踩着之前的版本头上回到该id版本,被踩的就没了!

git reset --hard HEAD^ : 有几个^就倒退多少个版本,这个嘛,也是同上,换个面具而已,一样暴力!

git revert -n 版本号 : 这个比较温柔,其实就是拿那个版本过来进行复制一份生成新的 (版本号就log看一下,有这么个东西 155dcasdf5856e2568b30b6b2e5cbbb9c00bbdc23 ,你就搞几个前面的数当做版本号就好了)

标签操作

git tag :查看标签

git tag v1.0.0 :打标签

git push origin v1.0.0 :将tag同步到远程服务器

merge 和 rebase 的区别

mergerebasea都是合并历史记录,但是各自特性不同:

merge

通过merge合并分支会新增一个merge commit,然后将两个分支的历史联系起来

其实是一种非破坏性的操作,对现有分支不会以任何方式被更改,但是会导致历史记录相对复杂

rebase

rebase会将整个分支移动到另一个分支上,有效地整合了所有分支上的提交

主要的好处是历史记录更加清晰,是在原有提交的基础上将差异内容反映进去,消除了 git merge所需的不必要的合并提交

冲突

Git无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成。 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交

一般情况下,出现分支的场景有如下:

  • 多个分支代码合并到一个分支时
  • 多个分支向同一个远端分支推送

具体情况就是,多个分支修改了同一个文件(任何地方)或者多个分支修改了同一个文件的名称

如果两个分支中分别修改了不同文件中的部分,是不会产生冲突,直接合并即可

应用在命令中,就是pushpullstashrebase等命令下都有可能产生冲突情况,从本质上来讲,都是mergepatch(应用补丁)时产生冲突

新手坑

! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://gitee.com/xiaoqi0727/xiaoqi01.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

远程仓库有最新的代码了,需要先拉取最新代码才能进行提交(可能会有冲突喔)!