日常一键三连操作
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 的区别
merge
和rebasea
都是合并历史记录,但是各自特性不同:
merge
通过merge
合并分支会新增一个merge commit
,然后将两个分支的历史联系起来
其实是一种非破坏性的操作,对现有分支不会以任何方式被更改,但是会导致历史记录相对复杂
rebase
rebase
会将整个分支移动到另一个分支上,有效地整合了所有分支上的提交
主要的好处是历史记录更加清晰,是在原有提交的基础上将差异内容反映进去,消除了 git merge
所需的不必要的合并提交
冲突
当
Git
无法自动合并分支时,就必须首先解决冲突,解决冲突后,再提交,合并完成。 解决冲突就是把Git
合并失败的文件手动编辑为我们希望的内容,再提交
一般情况下,出现分支的场景有如下:
- 多个分支代码合并到一个分支时
- 多个分支向同一个远端分支推送
具体情况就是,多个分支修改了同一个文件(任何地方)或者多个分支修改了同一个文件的名称
如果两个分支中分别修改了不同文件中的部分,是不会产生冲突,直接合并即可
应用在命令中,就是push
、pull
、stash
、rebase
等命令下都有可能产生冲突情况,从本质上来讲,都是merge
和patch
(应用补丁)时产生冲突
新手坑
! [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.
远程仓库有最新的代码了,需要先拉取最新代码才能进行提交(可能会有冲突喔)!