Git是啥&咋用
0. 常见操作
0.1 同步本地仓库至远程新仓库
第一步:建立git仓库,cd到你的本地项目根目录下,执行git命令
git init
第二步:将项目的所有文件添加到仓库中
git add .
第三步:将add的文件commit到仓库
git commit -m "注释语句"
第四步:将本地的仓库关联到github上 (尽量用SSH的地址)
git remote add origin git@github.com:***/test.git
第五步:上传github之前,要先pull一下,执行如下命令:
git pull origin main
第六步,上传代码到github远程仓库,第一次上传使用-u可以将本地分支和远程分支关联起来
git push -u origin main
0.2 同步远程仓库/分支至本地新仓库
仓库:
git clone git@github.com:***/test.git
分支:
-
查看所有远程分支
git branch -r
-
进入本地文件夹
git init
git remote add origin git@github.com:XXXX/nothing2.git
-
拉取远程分支
git fetch origin <远程分支名>
-
建立本地分支
法1:使用该方式会在本地新建分支x,并自动切换到该本地分支x,建立映射关系
git checkout -b <本地分支名> origin/<远程分支名>
法2:使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout,无映射关系
git fetch origin 远程分支名x:本地分支名x
-
拉取远程分支内容到本地
git pull origin <远程分支名>
0.3 更新文件
git add .
git commit -m "注释语句"
git push origin main
多人协作的工作模式通常是这样:
- 可以试图用git push origin
推送自己的修改; - 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin
推送就能成功!
0.4 同步分支
branch分支内容 合并到main主干
1、进入主分支
git checkout main
git pull origin main
2、查看所有分支是否都pull下来了
git branch -a
3、使用merge合并开发分支
git merge [branch]
4、查看合并之后的状态
git status
5、有冲突的话,通过IDE解决冲突;
6、解决冲突之后,将冲突文件提交暂存区
git add 冲突文件
或
git add . (提交所有文件)
7、提交merge之后的结果
git commit -m "备注内容"
8、本地仓库代码提交远程仓库
git push origin master
0.5 删除文件
git pull origin master # 将远程仓库里面的项目拉下来
dir # 查看有哪些文件夹
git rm -r --cached picture # 删除picture文件夹
git commit -m "删除了picture文件夹" # 提交,添加操作说明
git push origin master # 将本次更改更新到github项目上去
1. 理论
分布式版本控制工具
1.1 一些原理和概念
-
Repository(Repo) 仓库
版本库又名仓库,存储项目相关文件,包括本地仓库和保存在远程服务器的远程仓库,仓库间可以相互同步
origin通常代表远程仓库 -
Commit 提交
Git中会有频繁的提交,这里的提交实际上是通过记录项目的变动实现的,而不是每次的记录项目的全部内容,即,每一次新的提交是建立在最近一次提交的基础之上
比如按提交的时间顺序排列存在c1,c2,c3,c4。现在假设离现在最近一次提交是c4,那么不可以在c1和c2,或者c2和c3,或者c3和c4之间提交,只能提交成c5,然后Git通过记录c5和c4之间的差别,来记录这个c5提交
- Branch 分支
为了在不破坏版本系统一致性的前提下保存它们后来的变异,引入了新的描述子,这个新的描述子,就叫做分支
-
Merge 合并
如果同时修改同一段代码,则不能进行自动合并,需要手动解决 Conflict 冲突
HEAD的意思你可以理解为当前的工作目录,它总是指向最新的提交,所以用了HEAD(头部)这个词- Push 推送
-
Pull 拉取
从远程服务器拉取文件 -
Amend 修改
修改原有的提交,最好对本地代码使用 -
Stash 暂存
将当前未提交代码保存至stashes,代码重新回到未修改前,使用pop恢复暂存修改 -
Rebase 变基
合并的一种,将原有的分支嫁接到另一个,不保存修改历史,并fast- forward到最新提交 -
Checkout 迁出
回到之前的版本,此时head会回退 -
Undoing 撤退
undo,redo本地操作;Revert远程代码
2. 操作
Code
\\ 配置基本用户信息
git config --global user.name <用户名>
git config --global user.email <邮箱地址>
\\ 创建新仓库
git init
\\ 从远程服务器克隆仓库
git clone <url>
\\ 显示当前工作目录下的提交文件状态
git status
\\ 将指定文件Stage(标记为将要被提交的文件)
git add <file_path>
\\ 将指定文件Unstage
git reset <file_path>
\\ 查看修改内容
git diff <file>
\\ 创建一个提交并提供提交信息
git commit -m "<message>"
\\ 显示提交历史
git log
\\ 向远程仓库推送(Push)
git push
\\ 从远程仓库拉取(Pull)
git pull
\\ 修改上一个提交
git commit -amend - m "< New Message>"
查看所有分支
git branch
创建新分支
git branch <brach name>
切换分支
git checkout < branch name>
git switch < branch name>
在本地新建分支并切换到该分支
git checkout -b [本地分支名]
git switch -c [分支名]
重命名分支
git branch -m <old name> <new name>
删除分支
git branch -d <brach name>
合并指定分支到当前分支
git merge <brach name>
将分支变基到master(需要先切换到分支)
git checkout <brach name>
git rebase master
使用快进将分支合并到master
git checkout <brach name>
git merge -ff-only master
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并
git merge --no-ff -m "merge with no-ff" dev
终止这一次提交的合并
git merge --abort
将为提交的修改暂存(Stash)
git stash save "<Message>"
将上一个暂存的修改恢复并从暂存列表中删除
git stash pop
签出指定的提交
git checkout <commit hash>
撤销旧提交
git revert <commit hash>
查看本地仓库中所有的操作
git reflog
版本回退
git reset --hard commit_id
git checkout -- file_name
把文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
3.0 安装
a. 下载git
For Mac:
-
一是安装homebrew,然后通过homebrew安装Git,
Install homebrew if you don't already have it, then:
$ brew install git
-
从AppStore安装Xcode(推荐)
运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。
安装完成后,还需要最后一步设置,在命令行输入:
$ git config --global user.name "CiyouNi"
$ git config --global user.email "email@example.com"
b. 设置SSH key
ssh-keygen -t rsa -C "email" # email为你在github上注册的邮箱
找到id_rsa.pub
,并将内容复制到Github账户setting中
Ref
https://www.liaoxuefeng.com/wiki/896043488029600
https://www.jianshu.com/p/6969de20cd52
Git Doc
Pull/ Push
从安装到SSH Key 到各种操作