git常用的基础操作

最近内网安装了 gitlab 用以代码托管,鉴于有些同事对于 git 的生疏,写了这篇文档,顺便发出来共享。

ssh链接

cat ~/.ssh/id_rsa.pub      //查看本地是否有已生成的SSH key,存在会返回以'ssh-rsa'开头的字符串
cd .ssh                    //进入.ssh路径下
ssh-keygen -t rsa -C "your username like email address here" -b 4096  //生成ssh的公钥和私钥
cat id_rsa.pub             //查看公钥,将以'ssh-rsa'开头的字符串复制到剪贴板

登录 gitLab,在顶部导航栏用户头像的下拉菜单里点击’设置’,进入用户设置界面,然后点击’ssh密钥’,将复制好的内容填好,点击’Add key’即可

git常用命令

git init // 创建一个本地仓库
git add [.][filename][--all]//. 是追踪变化的文件,filename是追踪单个文件,--all是追踪所有文件
git commit -am '....' // 将 add 和 commit 合为一步, 但只能 cover 已被追踪的文件,新建的文件不能被提交
git status // 查看git处于什么状态
git push [origin dev]//本地同步到远程[单独同步dev分支]
git pull origin master   // 拉去远程仓库的master分支与本地master合并  等同于'git fetch origin master'和'git merge origin/master'
git fetch origin master  // 拉取远程仓库的master分支,不与本地master分支合并
git merge origin/master  // 将远程仓库的master分支与本地库中的master分支进行合并
git branch --set-upstream master origin/next // 手动建立本地master分支与远程仓库中next分支的追踪关系
git stash                // 将目前未提交的所有更改储藏在脏工作目录中,并回复到干净的目录状态
git stash pop            // 取出脏目录中的修改并继续
git pull origin master --allow-unrelated-histories  //两个仓库具有不同commit时,如确定是同一个远程库,可以用‘--allow-unrelated-histories’
git rm --cached sftp.json //取消追踪sftp.json文件

本地项目pro托管到 gitLab 操作如下:

登录 gitLab 新建项目 backer
复制gitLab项目的ssh地址 ‘ssh://git@d547bd18c8b1:20022/front-end-engineer/backer.git’
将docker地址手动改成ip地址 ‘ssh://[email protected]:20022/front-end-engineer/backer.git’

第一种方法:

cd pro                     //进到pro路径下
cd ..                      //进到pro项目上一级目录
git clone ssh://[email protected]:20022/front-end-engineer/backer.git
cd backer                  //这是通过clone backer生成的本地文件夹
cp -fr ../pro/* ./         //将pro中的文件拷贝到backer下,并覆盖原文件
git add *                  //对本地代码进行追踪
git commit -m "提交描述文字 like initial commit, create all files"//将本地代码提交到本地分支
git push origin master     //推送本地的master分支到远程仓库的master分支,如果远程不存在master分支,将会自动创建

第二种方法:

cd pro                     //进到pro路径下
git init                   //初始化一个本地的git仓库
git remote add origin ssh://[email protected]:20022/front-end-engineer/backer.git  //本地仓库关联到远程仓库
git add .                  //对本地代码进行追踪
git commit -m "提交描述文字 like initial commit, create all files"//将本地代码提交到本地分支
git push origin master     //推送本地的master分支到远程仓库的master分支,如果远程不存在master分支,将会自动创建

git分支

分支是协同作业的基础,每一个分支本质上是指向某一个 '一系列不同时刻的文件快照’的指针。一般情况,分支分为以下几种:

  • master分支:已发布或将发布的代码,非常稳定
  • develop分支:持续开发的代码
  • next分支:测试稳定版本,或后续开发版本
  • iss##分支:短期分支,修复bug并通过测试后可以合并到主分支

master用于与线上同步,develop用于开发,
开发新功能时,基于develop,创建本地分支,命名规则: feature/xxxxxx, 开发完成后,并入develop
修改线上bug时,基于master,创建本地分支,命名规则:hotfix/xxxxx, 修改完后,并入master, 并同步到develop

git分支命令

git branch -a //查看所有分支
git checkout branch //切换到branch分支上
git checkout -b b1 //本地仓库新建分并切换到支b1
git branch checkout -b new_branch origin //在远程仓库新建一个分支命名为new_branch
git branch -d branch //删除名为branch的分支 -D为强制删除
git branch -m old_branch new_branch //将old_branch重命名为new_branch
git merge new_branch //合并new_branch到当前分支

分支合并流程示例

hotfix/login 为刚修改好的代码,要将其并入develop分支

git branch   //列出当前版本库中所有分支
git checkout develop  //切换到develop 分支
git pull origin develop //拉去最新代码
git merge hotfix/login  //并入更新
git commit -am 'merge hotfix/login'  //提交临时分支,记录状态
git push origin develop //同步到远程

git忽略提交

git 忽略提交的文件目录设置在 .gitignore 目录内,其规则如下:
所有空行或者以 # 开头的行都会被 Git 忽略。
可使用标准的 glob 模式匹配。
匹配模式可以以(/)开头防止递归。
匹配模式可以以(/)结尾指定目录。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

# 所有已 .o 或 .a 结尾的文件都被忽略
*.[oa]
# 虽然 .a 文件被忽略,但是 lib.a 不能被忽略
!lib.a
# 只忽略当前目录中的 todo 文件,而不管其他文件夹下如何
/TODO
# 忽略 build 目录中的所有文件
build/
# 忽略 doc 直属的 .txt 文件,而不包括 doc/server/arch.txt
doc/*.txt
# 忽略 doc 目录中的所有 .pdf 文件
doc/**/*.pdf

git stash

...advertisement.html...inCoding  //正在master分支完成广告推送功能页面,发现登录的bug
git stash                         //隐藏目前所有的更改
...login.html...inCoding          //修改登录注册的bug
git commit -am 'fix login bug in a hurry'
git stash pop                     //取出之前隐藏的修改,继续开发
#甲修改提交了login.html,而不知道的你也正在修改login.html,当你执行pull的时候报错了,告诉你远程与你本地有不同的更改相冲突
git stash  //隐藏本地的修改
git pull   //再次拉去远程
git stash pop //解压
// 手动解决冲突的代码后再次提交

远程分支 b1 和 master 存在冲突的情况下 如何将 b1 合并到 master?

git fetch origin //将远程仓库代码拉取到本地 不进行 merge
git checkout -b b1 origin/b1  //本地仓库新建分支b1并和远程的b1关联
// 本地审查修改冲突的代码
git checkout master //切换到master分支
git merge --no-ff b1  //合并b1到master上,并保留之前的分支历史
git add .
git commit -m 'merge b1 to master'
git push origin master

git 版本回退

当你因为误执行了某些操作,导致工作区一团乱麻而且无从下手,那你可以尝试版本回退

// 如果你还没有提交,可以这样来做
git reset --hard HEAD // 回到上一次 commit 的状态,就是说清空你工作目录里所有的改动
git checkout -- hello.vue // 只回复 hello.vue 的状态

//如果你已经提交了,那么你再回到上一次提交的状态其实也不能帮忙,那么你可以尝试
git revert HEAD // 撤销最近的一次提交,也就是回到上次 commit 之前的状态
git revert HEAD^ // 撤销上上次提交

Git 远程管理

git remote add origin 'url' //关联远程库
git remote rm origin  //删除关联的远程库
git remote -v  //查看远程库
git remote rename old new //修改远程库地址

git 查看所有的提交

git log --pretty=oneline

猜你喜欢

转载自blog.csdn.net/zhai_865327/article/details/102857198