Git简介

git是一个版本控制工具,最初创建目的是为了协同Linux开发而产生的,该工具具有以下的特性:

  1. 允许多个开发者协同开发
  2. 不允许覆盖不同开发者间对仓库的改动
  3. 具有历史版本控制功能

下图(来自于Tutorialspoint展示的是git基本流程,首先是由本地的仓库增加问价到Stage区域,然后再由Stage提交到远程仓库:

此外,下图(来自于菜鸟教程)展示了git常使用的6个命令(git clone | push | add | commit | checkout | pull)之间的使用关系:

git基本使用

1. 通过使用git命令进行初始化

$ git init

2. 初始化之后可以设定用户名,其中--global参数是设定全局,不使用该参数则是针对当前git有效

$ git config --global user.name "winter" #用户名
$ git config --global user.email "info@winter.xyz" #用户邮箱

3. 之后可以通过add远程仓库(假定已经创建好远程仓库)

$ git add . #增加当前目录下所有文件

$ git add hello.c #增加指定文件

$ git commit -m "Init commit"

$ git remote add origin gituser@git.server.com:project.git

$ git push origin master

4. 创建分支并切换到该分支:

$ git checkout -b NewBranchName

5. 拉取远程仓库代码

$ git fetch #拉取
$ git pull

6. 分支基本使用

$ git branch #查看当前使用的分支

$ git clone https://reomte-resp/your-project 
克隆远程仓库,如果远程仓库有依赖第三方库,可以查阅该仓库的README文件进行操作

$ git branch -a #显示所有的分支

$ git branch -r #查看远程分支

$ git checkout master #切换到master分支

$ git checkout -b LocalBranchName origin/RemoteBranchName #创建分支并切换到该分支

$ git pull origin RemoteBranchName #从远程仓库更新到本地代码

$ git commit -am "document for new branch commit message." #as a command says.

$ git push --set-upstream origin RemoteRespName # git push -u origin RemoteRespNam

$ git push #推送到远程仓库

$ git push origin :old_branch #删除远程分支

$ git branch -d old_branch #删除本地分支

git常用指令

$ git log #查看提交的记录

$ git show commit-id #指定提交的信息

$ git diff # 查看提交前后区别,+表示增加,-表示删除

$ git merge dev #合并dev分支

7. 新增分支并提交

首先切换到master分支

git checkout master

创建分支并切换到该分支

git checkout -b new_branch

更新代码并提交

git add .
git commit -m "init new_branch"

推送到远程

git push origin new_branch

推送到其他仓库

git remote add xxx https://xxxxxx.git
git push xxx HEAD:xxx_branch

8. clone仓库指定分支

git clone -b branch_name http://xxxx

9. 使用RSA密钥进行链接

新建密钥对,位于~/.ssh文件夹下,如

id_rsa_aliyun和id_rsa_aliyun.pub

在~/.ssh文件夹下设置config文件

#Aliyun

HOST code.aliyun.com

HostName code.aliyun.com

User wentuo1996

PreferredAuthentications publickey

IdentityFile ~/.ssh/id_rsa_aliyun

使用RSA算法密钥,需要声明

PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

10. 管理git登陆凭证(HTTPS方式)

Windows:
控制面板->用户账户->管理Windos凭据
Control Panel->User Accounts->Manage Windows Credentials
查找到对应账户编辑即可

如果git的时候出现以下错误:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: UNPROTECTED PRIVATE KEY FILE! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Permissions 0755 for '/home/winter/.ssh/id_rsa_aliyun' are too open.

It is required that your private key files are NOT accessible by others.

This private key will be ignored.

Load key "/home/winter/.ssh/id_rsa_aliyun": bad permissions

git@code.aliyun.com: Permission denied (publickey).

fatal: Could not read from remote repository.

Please make sure you have the correct access rights

and the repository exists.

导致该错误的原因是因为权限过于开放,需要把权限设置更小,如:

chmod 600 ~/.ssh/id_rsa ~/.ssh/id_rsa.pub

10. 更换git仓库地址

方法有三种:

  • 修改命令
git remote set-url origin [url]
  • 先删后加
git remote rm origin
git remote add origin [url]
  • 直接修改config文件

使用问题

git 通过代理提交失败

错误:

Failed to connect to github.com port 443 after 21069 ms: Timed out

解决方法:

git config --global http.proxy <address\>:<port\>

git 通过代理clone失败

错误:

Cloning into 'VulkanSamples'…

fatal: unable to access 'https://github.com/LunarG/VulkanSamples.git/': OpenSSL SSL_read: Connection was reset, errno 10054

解决方法:

git config --global http.sslVerify "false"

gitignore不生效

不生效的现象表现为添加进来ignore的文件或者文件夹依旧会被归入版本管理中。

git rm -r --cached .

git add .

git commit -m ".gitignore Fixed"

remote link operation

git remote rm origin #delete origin remote link
git remote -v # show the current remote links

ssh -T git@github.com Connection timed out

参考 https://docs.github.com/zh/authentication/troubleshooting-ssh/using-ssh-over-the-https-port

  • 该命令默认使用22端口,可以切换到443端口进行使用

    $ ssh -T -p 443 git@ssh.github.com
  • 修改config文件

    #Github
    HOST github.com
    # before hostname: github.com
    HostName ssh.github.com
    User xxxx
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/xxx_rsa
    # add this
    Port 443
  • 测试

    $ssh -T git@ssh.github.com
    Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.
最后修改:2024 年 01 月 20 日
如果觉得我的文章对你有用,请随意赞赏