Git常用场景下的操作

本文详细介绍了Git的多种操作,包括本地代码首次提交到远程仓库的三种方案、打标签的两种方式、强制回退到历史版本并推送到远程仓库、删除本地和远程仓库文件、迁移远程仓库地址以及强制覆盖本地代码与远程仓库保持一致,还给出了部分报错的解决办法。

一、本地代码首次提交到远程仓库

方案一:

1. 在远程仓库上创建一个仓库

2. 克隆远程仓库

git clone 远程仓库地址

3. 将代码拷贝到本地仓库目录下

4. 提交到暂存区

git add .

5. 提交到本地仓库

git commit -m "注释"

6. git push

推送到远程仓库

 

方案二:

1.git init 

在gitRepos目录下 初始化一个git仓库

2.git add 

复制一个文件到gitStore目录下,然后执行git add .

将“修改”从当前工作区存放到暂存区

3.git commit -m "first commit"

将暂存区中存放的文件提交到git仓库

4.在远端新建一个git代码库

5.git remote add origin 远端仓库git地址

将本地代码库的当前分支与远程的代码库相关联

6.git push -u origin master

将本地代码库的当前分支强制推送到远程的代码库(这样会使远程修改丢失,尤其是在多人协作开发时是不可取的)

 

第6步中,如果使用 git push,会出现错误提示,

如下图所示:

使用 git push --set-upstream origin master,会出现如下错误

 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'http://111.225.223.40:88/fxb/fxb_dashboard.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
如下图所示:

按照提示执行 git pull命令,出现如下错误:

There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> master

如下图所示:

根据提示执行 git push --set-upstream origin master,出现如下错误

 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'git远程仓库地址'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

执行 git pull origin master,出现如下错误:

fatal: refusing to merge unrelated histories

执行 git pull origin master --allow-unrelated-histories

成功pull,但是出现冲突:

解决冲突并add、commit后,再次执行 git pull命令,出现提示信息:

There is no tracking information for the current branch.

执行命令 git branch --set-upstream-to=origin/master master

再次执行 git push,成功推送到远程仓库。

 

方案三:

将本地将拉的开发分支推送到远程仓库

$ git push <远程主机名> <本地分支名>:<远程分支名>

git push origin dev:dev

#master 为设置的远程仓库别名,第一个dev为本地分支名,第二个dev为远程分支名

 

二、打标签

方案一:

git tag 标签名称

git tag 标签名称 commitid:为某一个commit定义标签

git tag -a 标签名称 -m "注释" commitid:为某一个commit定义标签时添加注释

方案二:利用GPG实现标签加密

1. 使用GPG生成自己的密钥

gpg --gen-key

完成后建议记录 密钥号(gpg key)、用户ID(uid)、密码(生成密钥时输入的密码)

2. 生成撤消的整数(可以不生成)

gpg --gen-revoke 密钥号

例如:gpg --gen-revoke 57E54640

3.使用gpg生成标签

(1) 设置git全局使用的gpg程序路径

git config --global gpg.program "C:\Program Files (x86)\GNU\GnuPG\gpg2.exe"

(2) 设置git全局要签名的key(也可以不设置)

如果设置此项,那么使用git tag命令时就不需要添加 -u 选项了

git config --global user.signingkey 密钥号

例如:git config --global user.signingkey 57E54640

(3) 使用GPG生成tag

git tag -u "密钥号" -s 标签名 -m "注释" commitId

例如:git tag -u "57E54640" -s v0.9 -m "生成gpg tag" 23aed86

注意:标签名中不能有中文

(4) 验证tag(可以不验证)

git tag -v 标签名称

(5) 向远程库推送tag

向远程库推送单个tag:

git push origin 标签名称

向远程库推送所有tag:

git push origin --tags

4. 删除标签

(1) 删除本地标签:

git tag -d 标签名称

创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

(2) 删除远程标签:

如果标签已经推送到远程,先从本地删除,然后远程删除:

git push origin :refs/tags/标签名称

 

三、强制回退到某个历史版本再推送到远程仓库

1. 使用 git log 命令查看历史版本

git log

或者

git log --pretty=oneline

2. 回退到指定的历史版本

回退到指定的提交ID:

git reset --hard 提交ID

或者

回退到上一个版本:

git reset --hard HEAD~1

或者

回退到上一个版本:

git reset --hard HEAD^

3. 推送到远程(回退远程分支)

git push -f -u origin master

或者

git push origin HEAD --force

4. 推送时可能遇到以下报错信息:

You are not allowed to force push code to a protected branch on this project.

解决办法:如果用的是gitlab,这时可能是gitlab设置了保护分支。

"Settings" -> "Repository" -> "Protected branches",如下图所示步骤,最后点击“解除保护”,然后再次执行命令:

git push origin HEAD --force

 

四、删除本地仓库和远程仓库中的文件

1. 删除本地仓库中的文件

git rm 文件名

直接删除文件之后,也需要使用 git rm 删除版本库中的文件。

2. 提交到本地仓库

git commit -m "注释"

3. git push

推送到远程仓库

 

五、迁移远程仓库,即修改本地仓库的远程仓库地址

1. 修改本地仓库的远程仓库地址

git remote set-url 远程名称 远程git地址

例如:

git remote set-url origin 远程git地址

2. 逐个将本地分支推送到远程

git push origin master:master

git push origin dev:dev

 

六、强制覆盖本地代码,与远程GIT仓库保持一致

方法一:分步执行git强制覆盖:
    git fetch --all
    git reset --hard origin/master
    git pull

方法二:单条执行git强制覆盖本地命令:
    git fetch --all && git reset --hard origin/master && git pull
 
第一个是:拉取所有更新,不同步;
第二个是:本地代码同步线上最新版本(会覆盖本地所有与远程仓库上同名的文件);将主分支重置为您刚刚获取的内容。 --hard选项更改工作树中的所有文件以匹配origin/master中的文件
第三个是:再更新一次(其实也可以不用,第二步命令做过了其实)

 

不断更新中……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值