GIT 学习
写在前面
别骂了,不要问我为什么现在才学git命令。没有截图,写得比较简短,主要是希望自己能一看就回忆起来。
一、初始化
git init
echo "xxxxxxxxx" >> README.md
git add README.md // 添加README文件
- 官方的代码:
用cmd 创建新的仓库:
echo "# ft2" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/xxxxx/ft2.git
git push -u origin main
使用已有仓库创建新的仓库:
git remote add origin https://github.com/xxxxx/ft2.git
git branch -M main
git push -u origin main
二、提交文件
git add * // 从工作区添加本地所有文件到暂存区
git commit -m "提交新文件" // 提交到暂存区,-m为注释
git remote add origin https://github.com/xxxxx/Ft2.git // 添加远程仓库,名为origin
git push origin master // 上传新文件至master分支
三、创建、删除、切换和合并分支
git checkout -b branchft2_1 // 创建名为 branchft2_1 的新分支
git checkout -d branchft2_1 // 删除
git add *
git commit -m "add 333.h"
git push origin branchft2_1 // 将改动push至新分支
git checkout master // 切换当前分支为 master
git diff master branchft2_1 // 查看两个分支的差异
git checkout master
git merge branchft2_1 // 合并分支
git push origin master // 提交
如果 merge 时报错
fatal: refusing to merge unrelated histories
,可以用:
git merge branchft2_1 --allow-unrelated-histories
四、拉取分支
git pull origin master // 将本地文件更改为master分支的文件
其实 git pull 的效果和 git fetch + git merge 类似,都能够更新本地文件,但并不建议直接使用 git pull :
请看大佬的解答:
不要用git pull,用git fetch和git merge代替它。
git pull的问题是它把过程的细节都隐藏了起来,以至于你不用去了解git中各种类型分支的区别和使用方法。当然,多数时候这是没问题的,但一旦代码有问题,你很难找到出错的地方。看起来git pull的用法会使你吃惊,简单看一下git的使用文档应该就能说服你。
将下载(fetch)和合并(merge)放到一个命令里的另外一个弊端是,你的本地工作目录在未经确认的情况下就会被远程分支更新。当然,除非你关闭所有的安全选项,否则git pull在你本地工作目录还不至于造成不可挽回的损失,但很多时候我们宁愿做的慢一些,也不愿意返工重来。
个人认为,将 pull 分为两个操作的好处是,先 fetch,然后再 merge,就可以清楚看到本地改动和分支(即两个分支)的冲突,当代码出现问题时可以很快找到。而 pull 则是暴力地从远程仓库获取最新版本来替换本地文件,并且并不会显示替换的细节。
五、标签
git log // 查看历史版本
git tag 1.0.0 f2ce402526d6d0 // 选定版本,并设定标签为1.0.0,哈希值(commitID)可以不用复制全
git push origin main --tags // 设置标签不需要经过commit操作
六、本地文件更新
当我们修改了本地文件,想要获取远程仓库 test1 分支中的文件来更新本地文件。但同一项目其他成员已修改代码,如果想要合并就会报错:
> git merge origin/test1
error: Your local changes to the following files would be overwritten by merge:
twitter_spider/twitter_process_keyword.py
Please commit your changes or stash them before you merge.
Aborting
这时我们可以选择保留或者放弃本地更改:
- 保留本地更改
git stash #封存修改
git fetch origin test1
git merge origin/test1
git stash pop #把修改还原
- 放弃本地更改
// 单个文件
git checkout -- 111.py // 使用HEAD中最新内容替换掉工作目录中的文件
// 所有文件
git fetch origin test1
git reset --hard origin/test1 // 以上两句的作用是丢弃本地更改,将本地文件回退版本
感谢
B站BV号:BV1Mp4y1q75m
error: Your local changes to the following files would be overwritten by merge 解决方案