git 学习
git --version
常用的shell命令
pwd 获取当前路径
ls 罗列文件或文件夹
ls -la 包含隐藏文件
cd . 当前路径
cd .. 上一级
cd ~ 默认路径
cd / 根路径
mkdir 创建文件夹
touch 创建文件
rm 删除文件
rm -rf 文件名1 文件名2 强制删除
clear 清空当前页面
配置用户名和邮箱
git config --global user.name "abc"
git config --global user.email 123@def.com
git config --list
管理git项目
git init 进入文件,初始化成本地仓库
git init abc 在当前目录创建abc文件,并初始化成本地仓库
git status 查看变动
git add def add某文件
git add . add所有未被追踪状态的内容
git commit -m "changedcontent"
git commit -am "add+commit" 仅对已被追踪的文件使用(add过的)
git log
git log -p -2 最近两次提交内容差异
git log --author
git log --oneline 一行显示
git log --graph
git log --graph --oneline
git log --pretty=online
git log --pretty=format:“%h - %an, %ar : %s”
git log --author="abc"
git diff modified后,追踪所有文件修改前后的区别
git diff 文件名
git diff --staged git add后使用
git rm -r --cached 某文件 从add后状态变成未追踪的
文件忽略
.gitignore
/node_modules 忽略node_modules文件夹下所有文件
*.log 忽略.log结尾的文件
*.zip 忽略.zip结尾的文件
未添加到缓存区,文件还原
git checkout -- [filename] 恢复到上一次的状态(add之后不行)
已添加到缓存区,撤销追踪与文件还原
git reset HEAD [filename] 撤销当前文件的追踪(从缓存区到add之前的状态)
git checkout -- [filename]
版本回退(会删除版本)
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上上一个版本
git reset --hard hash号 回退到指定hash版本
回到旧版本(保留所有的版本号)
git log
git checkout [hash] -- [filename]
git checkout [hash] -- .
建立切换删除分支
git branch 罗列分支
git branch [name] 建立分支
git checkout [branch name] 切换分支
git checkout -b [branch name] 建立并切换分支
git branch -d [name] 删除分支(在当前分支上,无法删除自身)
git branch -D [name] 强制删除分支(有过修改,未合并)
git branch 原brach名字 hash号 误删分支可以恢复,eg:git branch master hash号
git branch --merged | egrep -v "(^\*|master|develop)" | xargs git branch -d 一次性删除合并后的分支,除了master和develop分支
git branch --no-merged | egrep -v "(^\*|master|develop)" | xargs git branch -D 一次性删除未合并的分支,除了master和develop分支
合并分支
git checkout master 在master分支下
git merge [branch name] 将branch name的内容覆盖给master
git merge [branch name] --no-ff 不用快转机制fast-forward (不忽略重复的版本,显示所有的版本号)
git merge --squash [branch name] 压缩(使用快转)
git merge [branch name] --no-ff --no-commit 未提交
git merge --no-ff --squash [branch name] 两个功能冲突!
git reset --hard ORIG_HEAD 恢复到没有合并之前
git branch --merged 查看已经合并的分支
git branch --no-merged 查看未合并的分支(不会显示当前分支)
合并时发生冲突
git merge [branch name]产生merge conflict
git status 查看冲突原因
1.git merge --abort 忽略合并
2.解决冲突,打开文件,选择对的或者都选也可以,并提交git commit,按i(insert)做出记录,按ESC,在冒号后输入wq(保存并退出)
查看版本线图
git log
git log --oneline
git log --oneline --graph
git log --oneline --graph --all
git log --oneline --graph -[number] #最近[number]个版本线图
本地仓库推送到远端仓库
cd existing_folder
git init
git remote add origin(名字可以自己改) https://github.com/xxx.git
git add .
git commit -m "first commit"
git branch -M master
git push -u origin(名字可以自己改) master
查看远端 git remote
删除远端链接 git remote remove origin
主仓库作为服务器
创建一个仓库,名为:owner名+.github.io
获取远端项目
若download zip,则无仓库信息
新建文件夹,并cd进入
git clone --help
git clone [远端仓库地址] 克隆,并自动checkout到master分支
git clone --no-checkout [rename] 不自动切换,重命名
git clone --bare [远端仓库地址] 克隆一个裸的仓库(.git文件)
git clone [改裸仓库的本地地址] 可以克隆完整仓库信息
git pull =git fetch+git merge
git fetch
git merge
git remote -v 查看fetch和pull的地址
删除远端分支
git branch -a 会显示远端追踪分支
git push origin --delete [branch name]
仓库迁移
git remote -v 查看fetch和pull的地址
git remote set-url origin [远端空的仓库地址]
git remote -v 查看发现url改变成远端空的仓库地址
git push --all 将本地仓库内容迁移至远端空的仓库
情景演练
A:
git init
touch .gitignore
git status
code .gitignore
git add .
git commit -m "first commit"
git log --oneline
git remote add origin [远端仓库地址]
git push -u orgin master
B:
git clone [远端仓库地址]
git branch
git checkout -b developB
code . 作出修改
git status
git add .
git commit -m "develper B change"
git log --oneline
git checkout master
git merge --no-ff developB
git log --oneline --graph
git push --all
A:
git pull
git checkout -b developA
作出修改
git status
git add .
git commit -m "develop A change"
git checkout master
git merge developA
git push --all
使用SSH连接GITHUB/GITLAB
cd ~ 默认路径下
ssh-keygen
cd .ssh
ls id_rsa 私钥(解密)id_rsa.pub 公钥(加密)
cat id_rsa.pub 将内容复制到github/gitlab SSH KEY中
git clone [SSH地址]
fork
fork到自己的gitlab/github,然后开发,再提醒原作者看
merge requests—new merge request—compare branches and continue—submit merge request
原作者可以查看变动内容,并决定merge还是close
GitLab CI/CD
Continuous Integration
Continuous Delivery
Continuous Deployment