git常用的基础操作

mac2025-07-06  14

最近内网安装了 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://git@192.168.77.221:20022/front-end-engineer/backer.git’

第一种方法:

cd pro //进到pro路径下 cd .. //进到pro项目上一级目录 git clone ssh://git@192.168.77.221: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://git@192.168.77.221: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
最新回复(0)