git常见命令
初始化仓库:git init 指定目录下初始化仓库:git init newrepo【newrepo下初始化】
添加文件:git add filename,例如:git add *.c【添加所有以.c结尾的文件】
- git add . :提交所有修改的和新建的数据暂存区
- git add -u :提交所有被删除和修改的文件到数据暂存区
- git add -A:提交所有被删除、被替换、被修改和新增的文件到数据暂存区
提交文件到仓库:git commit -m “注释信息”【如果您不使用-m,会出现编辑器来让你写自己的注释信息。当我们修改了很多文件,而不想每一个都add,想commit自动来提交本地修改,我们可以使用-a标识。】
git commit -a -m “Changed some files”【git commit 命令的-a选项可将所有被修改或者已删除的且已经被git管理的文档提交到仓库中。千万注意,-a不会造成新文件被提交,只能修改。一般不建议用】 - 查看分支:git branch
- 创建分支:git branch
- 切换分支:git checkout
- 创建+切换分支:git checkout -b
- 合并某分支到当前分支:git merge
- 删除本地分支:git branch -d <分支name>
- 删除远程分支:git push origin --delete <分支name>
- 查看记录:git status
- 合并分支:git merge <分支name>
- 查询分支:git remote -v
- 推送分支到远程服务器:git push origin <本地分支name>:<远程服务器分支name>
- 解决冲突:先修改冲突文件,再 git add,接着 git commit,最后 git push origin
- 分支同步主干master代码:git checkout master
- 拉取master最新代码:git pull 【或者git pull xxx ;注释:xxx为git代码所在路径】
- 拉取某个分支最新代码:git pull origin <分支name>
- git checkout <分支name>
- git merge master 合并主干代码到当前所在分支
- 拉取分支代码:git clone -b <分支name> <git仓库路径>
- 问题:已经过时,请先merge主干到分支生成新的btag 或 发现未合并内容?
拉取远程分支并创建本地分支
git checkout -b feature/zhengyuhui5 origin/master
git push origin feature/zhengyuhui5:feature/zhengyuhui5_1.0.0 - Linux中,这时把全局要忽略的文件列表.gitignore放当前用户根目录下:
git config --global core.excludesfile ‘~/.gitignogtire’
查询全局的配置 git config --list,发现gitignore已经为全局文件 - git log # 查看修改的历史记录:从最近到最远的提交依次显示。仅显示commit的版本号
- git log --pretty=oneline # 字面意思:将记录以一行的方式显示,只会显示版本号和提交时的备注信息
- git reset --hard HEAD^ # 回退到上一个版本;HEAAD^^为回退到上上一个版本;HEAD~100为回退到上100个版本
- git reset --hard 4fa142c # 4fa142c为某次修改事件A的版本号(commit ID)。对应git log命令下显示的前七位数。那么此时会回退到事件A时刻的修改记录
- git reflog # 查看每次修改对应的版本号(commit ID),包含删除、分支切换、分支pull的版本号
git操作流程
1、git clone 分支代码到本地
2、更新代码前,git pull origin master 分支上的代码,更新最新代码
3、git add .添加所有新增加的文件夹
4、git commit -m “描述”
5、git push 推送到远程仓库
操作总结
1、若gitignore只能忽略未曾被暂存的文件,如果曾经提交过产生版本库,那先把本地缓存删除(改变成未track状态)如下:
- git rm -r --cached .
- git add .
- git commit -m ‘update .gitignore’
2、若修改了某个文件不想提交,则:
- 先git add . 或者git add -u等提交所有文件
- 再git reset filename(filename路径可以使用git status查到)
- 再进行commit
3、删除了某个文件,恢复文件
- 先使用git status查看删除的文件路径/文件名
- git reset HEAD 文件路径/文件名
- git checkout 文件路径/文件名
4、远程修改了某个文件,本地也修改了这个文件,此时使用git pull会有冲突,可以解决冲突:
- git stash:将工作区恢复到上次提交的内容,同时备份本地所做的修改
- git pull
- git stash pop:将之前本地做的修改应用到当前工作区
或者放弃本地代码的方法 - git reset --hard
- git pull
服务器上git的安装
安装git:
yum install -y git
git --version 查看git版本
yum安装git被安装在/usr/libexec/git-core目录下
ssh配置:
ls -al ~/.ssh
服务器配置ssh:
原理:SSH?Key的基本原理是这样的:在你的本机上创建两个Key文件,一个是私钥,一个是公钥,私钥放在本地,公钥放在远程服务器。当你通过SSH?Key登录到远程服务器时,远程服务器使用公钥创建了一个加密的随机消息,然后发送到本地机器,本地机器使用私钥解密消息,发送解密的消息到远程服务器。远程服务器验证这个解密后的消息,然后授权访问
步骤:
1、cd ~/.ssh
2、ssh-keygen -t rsa -b 4096 -C “your_email@example.com”
3、然后回车三连击…可以看到当前目录下多出两个文件id_rsa.pub 和 id_rsa 带后缀是公钥,不带是私钥
注:要是已经有公钥了,那就rm -f删掉,再生成
4、然后将公钥配置在gitlab中
更新代码:
5、git clone -b test 仓库地址
6、拉取某个分支最新代码:git pull origin test
遇到的问题
1、远程仓库修改分支名称,例如修改从main->master,本地仓库需要做如下同步修改,才可以pull代码
git branch -m main master
git fetch origin
git branch -u origin/master master
git branch --set-upstream-to=origin/ master 为本地分支名称
2、从分支A切换到分支B时,若在分支A合并到分支B的时候出现了 冲突,那此时会出现报错提示:you need to resolve your current index first,停留在merge状态,所以需要回到merge前
git reset --merge
3、合并test分支到master分支的时候,提示冲突,怎么取消合并?
git merge --abort
4、分支合并原理
修改了同一个地方才会冲突,如果a没动,b添加了代码,则会追加不会冲突
5、删除本地文件后,想从远程仓库中重新Pull最新版文件。Git提示:up-to-date,但未得到删除的文件
原因:当前本地库处于另一个分支中,需将本分支的Head重置至master.
git checkout master
git reset --hard
svn
1)安装:yum -y install svn
2)下载代码到本地指定路径:svn checkout +svn路径+本地路径
下载指定版本代码到本地指定路径:svn checkout + svn路径+本地路径 -r 版本号
例:svn checkout svn://xxxx/ ./xxxx -r 505
3)更新代码到本地指定路径:svn update + svn路径+本地路径
更新指定版本代码到本地指定路径:svn update + svn路径+本地路径 -r 版本号
svn update svn://xxxx/ ./xxxx-r 500