git使用和常见问题

git下载网址

https://registry.npmmirror.com/binary.html?path=git-for-windows/

1. error: remote origin already exists

如果你clone下来一个别人的仓库,在此基础上完成你的代码,推送到自己的仓库可能遇到如下问题:
error: remote origin already exists.表示远程仓库已存在。
因此你要进行以下操作:
1、先输入git remote rm origin 删除关联的origin的远程库
2、关联自己的仓库 git remote add origin https://gitee.com/xxxxxx.git
3、最后git push origin master,这样就推送到自己的仓库了。

git pull 别人的代码
git push时出现

$ git push
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository using

    git remote add <name> <url>

and then push using the remote name

    git push <name>

需要使用git remote

    # 查看关联的远程仓库的名称
    git remote
    
    # 查看关联的远程仓库的详细信息
    git remote -v
    
    # git_url 为你的远程仓库的 url,可采用 http 协议或 ssh(git) 协议
    git remote add origin <url>
    
    # 删除关联的远程仓库
    git remote remove <name>
    
    # 添加新的远程仓库关联
    git remote add <name> <url>

第一次push需要配置

第一次push时需要网址
 
 git add --all  或者使用 git add .(所得的文件) | git add file.js(对用指定文件)

 git commit -m "提交信息"

 git remote add origin '远程仓库url'

 git push -u origin origin(对应远程分支名)


2.忽略文件跟踪

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.没有 add 也没有commit 使用git checkout 文件来恢复
2.有add,但是没有commit
3.有add,也有commit

破解为何添加了ssh keys还是无法git push

由于之前并没有单独使用ssh keys的习惯,在git clone的时候很多时候都是按照git init repo上的指示,采用了https协议,而非git协议。
为了验证我的猜想,我需要查看这个项目的remote到底是什么,使用以下命令
git config --get remote.origin.url
返回
https://github.com/zhangsan/shuofa.git

证实了我们在clone的时候采用的是https协议。https协议会每次要求你输入账户密码,而git协议才可以使用ssh-keys文件,实现git push自由。
于是我们需要更改remote协议
git remote set-url origin git@github.com:zhangsan/shuofa.git

ssh keys的正确设置
只有git协议才可以使用ssh-keys文件,从而实现一键git push。https协议只支持账户密码输入。雪上加霜的是,在今年8月13日以后,git不再支持https协议。

在这里插入图片描述

在这里插入图片描述

记住的:
    git add  # 工作区---》提交到暂存区
    git commit -m  # 暂存区--》提交版本库
    git reset --hard 版本号  # 回归版本
会用:
    git init  # 管理文件夹
    git status  # 查看被管理的文件情况
    git log  # 查看版本库 详细
    git reflog	# 查看版本库 简略

了解:
    git checkout .  # 回滚工作区的内容
    git reset HEAD  # 将暂存区的回到工作区
    git config --global user.email "306334678@qq.com"  # 设置作者
    
    
"""
    1)有红色信息(工作区有内容),就执行 add 
    2)全绿信息(内容全部在暂存区),才执行 commit
    3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
    空文件夹不会被git记录
"""

3.git修改撤销和回退

版本撤销及常见场景
根据上述结构,Git 版本回退可以分为 4 种,即 1. 工作区的代码想撤销 2. add 到暂存区的代码想撤销 3. 提交到本地仓库的代码想撤销 4. 远程仓库的代码想撤销

3.1 工作区的代码想撤销

git checkout -- <file> 撤销当前工作目录中指定文件的修改

3.2 add 到暂存区的代码想撤销

git reset HEAD 将已经 add 到暂存区的代码撤销到工作区,即 add 操作的逆操作

3.3 提交到本地仓库的代码想撤销

可以利用 git reset --hard <版本号> 命令来实现版本回退,该命令中的版本号有几种不同的写法:可以使用 HEAD^ 来描述版本,一个 ^ 表示前一个版本,两个 ^^ 表示前两个版本,以此类推;也可以使用数字来代替 ^,比如说前 100 个版本可以写作 HEAD~100;也可以直接写版本号,表示跳转到某一个版本处。每次提交后,都会生成一个哈希码作为版本号,所以这里可以直接填版本号,哈希码很长,但是不用全部输入,只需要输入前面几个字符即可。注意:此操作会直接将工作区,暂存区的当前内容清空,并撤回到指定回退版本的状态

3.4 远程仓库的代码想撤销

本地撤销后,push 到远程即可。可能会报错远程分支比当前本地分支超前,可以通过该 -f 参数强制 push 到远程。

3.5 版本回退误操作的补救

有时候脑抽或者手欠,总是可能发生一些意外,特别是 git reset --hard 这个死亡操作,更是可能产生严重后果。如果发现 git reset --hard 误操作了,在某些情况下是可以还原的:(1)想还原被回退了的那些 commits 的内容,比较简单;(2)想还原被 add 但是没有 commit 的内容,比较复杂;(3)想还原没有 add 的内容,别做梦了,基本不可能。 首先的首先,切记,还原操作之前,先把当前的内容做好备份!还原操作本身也是有“破坏性”的,别捡回西瓜,又丢了芝麻。

3.6 还原被回退了的那些 commits

git reset --hard 虽然会导致回退区间内的 commits 内容被删除,但是其实这些记录还是在的。如果想取消这次回退,可以先用 git reflog 查看所有 commit 历史(也包括被我们误回退了的那些 commits),大概结果如下:9565525 (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: reset: moving to HEAD^
5f117a5 HEAD@{1}: commit: test2
9565525 (HEAD -> main, origin/main, origin/HEAD) HEAD@{2}: commit: test1
726293d HEAD@{3}: init可以看到有两个 HEAD->main 开头的 commits,其实就是我们名义上的当前版本和回退操作所回退到的版本(这俩其实是同一个版本),而这俩版本中间的 commits 就是被我们回退操作删除了的内容。如果我们希望撤销误回退操作,只需要找到这个操作之前的 commit id(这里是 5f117a5),执行 git reset --hard 5f117a5 就行了(注意:撤销回退也是通过 git reset --hard 命令实现的,所以执行之前务必先保存好当前还需要的内容,别又被撤销回退的操作给冲掉了,无限套娃)。

3.7 还原 add 但没有 commit 的内容

这个复原比较麻烦,但是是有可能的。主要用到的命令是 git fsck --lost-found,运行后,可以在本地项目文件中路径为 .git/lost-found/other 的地方,找到所有的没有 add 但没有 commit 的文件,甚至可能还包括你每次 git add 的版本。

4.git tag

# 列出所有tag
$ git tag

# 新建一个tag在当前commit
$ git tag [tag]

# 新建一个tag在指定commit
$ git tag [tag] [commit]

# 删除本地tag
$ git tag -d [tag]

# 删除远程tag
$ git push origin :refs/tags/[tagName]

# 查看tag信息
$ git show [tag]

# 提交指定tag
$ git push [remote] [tag]

# 提交所有tag
$ git push [remote] --tags

# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]

5.删除远程仓库的分支

git push origin --delete <branch_name>

这里的 <branch_name> 是你想要删除的分支名称。

例如,如果你想要删除名为 feature/awesome-feature 的分支,你可以执行

git push origin --delete feature/awesome-feature

6.当前仓库与远程仓库冲突,远程仓库的部分东西本地仓库没有,例如远程仓库有readme.md文档本地没有就会报错。
解决方法:

#可以允许不相关历史提,强制合并,确实解决了这个问题
git pull origin master --allow-unrelated-histories
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值