Linux git环境搭建和常用指令--推送至Github为例

安装Git

 sudo apt-get install git

提交代码信息配置

$ git config --global user.name "runoob"
$ git config --global user.email [email protected]

查看信息配置

git config --list --global

为git添加远程仓库

要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,命令格式如下:

git remote add [shortname] [url]

例如

git remote add origin [email protected]:DreamCats/git-testone.git

本例以 Github 为例作为远程仓库,如果你没有 Github 可以在官网 https://github.com/注册。
由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过SSH加密的,所以我们需要配置验证信息:
使用以下命令生成 SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

后面的 [email protected] 改为你在 Github 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。

成功的话会在 ~/ 下生成 .ssh 文件夹,进去,打开公钥 id_rsa.pub,复制里面的 key。

$ ssh-keygen -t rsa -C "[email protected]"

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/tianqixin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): # 直接回车
Enter same passphrase again: # 直接回车
Your identification has been saved in /Users/tianqixin/.ssh/id_rsa.
Your public key has been saved in /Users/tianqixin/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:MDKVidPTDXIQoJwoqUmI4LBAsg5XByBlrOEzkxrwARI [email protected]
The key’s randomart image is:
±–[RSA 3072]----+
|E*+.+=oo |
|%Oo+oo=o. . |
|%
.o.o. |
|OO. o o |
|+o+ S |
|. |
| |
| |
| |
±—[SHA256]-----+
回到 github 上,进入 Account => Settings(账户配置)。
Linux git环境搭建和常用指令--推送至Github为例_第1张图片

左边选择 SSH and GPG keys,然后点击 New SSH key 按钮,title 设置标题,可以随便填,粘贴在你电脑上生成的 key。
Linux git环境搭建和常用指令--推送至Github为例_第2张图片
Linux git环境搭建和常用指令--推送至Github为例_第3张图片

添加成功后界面如下所示
Linux git环境搭建和常用指令--推送至Github为例_第4张图片

为了验证是否成功,输入以下命令:

$ ssh -T [email protected]

The authenticity of host ‘github.com (52.74.223.119)’ can’t be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes # 输入 yes
Warning: Permanently added ‘github.com,52.74.223.119’ (RSA) to the list of known hosts.
Hi tianqixin! You’ve successfully authenticated, but GitHub does not provide shell access. # 成功信息
以上命令说明我们已成功连上 Github。

之后登录后点击" New repository " 如下图所示:
Linux git环境搭建和常用指令--推送至Github为例_第5张图片

之后在在Repository name 填入 runoob-git-test(远程仓库名) ,其他保持默认设置,点击"Create repository"按钮,就成功地创建了一个新的Git仓库:
Linux git环境搭建和常用指令--推送至Github为例_第6张图片

创建成功后,显示如下信息:
Linux git环境搭建和常用指令--推送至Github为例_第7张图片
以上信息告诉我们可以从这个仓库克隆出新的仓库,也可以把本地仓库的内容推送到GitHub仓库。

创建GIT仓库并推送日志

$ mkdir runoob-git-test                     # 创建测试目录
$ cd runoob-git-test/                       # 进入测试目录
$ echo "# 菜鸟教程 Git 测试" >> README.md     # 创建 README.md 文件并写入内容
$ ls                                        # 查看目录下的文件
README
$ git init                                  # 初始化
$ git add README.md                         # 添加文件
$ git commit -m "添加 README.md 文件"        # 提交并备注信息
[master (root-commit) 0205aab] 添加 README.md 文件
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

 # 提交到 Github
$ git remote add origin [email protected]:tianqixin/runoob-git-test.git
$ git push -u origin master

结果如下

Linux git环境搭建和常用指令--推送至Github为例_第8张图片

附注

git --help    //查看相关git操作指令

添加推送内容

git add -A 表示添加所有内容;
git add .  表示添加新文件和编辑过的文件不包括删除的文件;
git add -u 表示添加编辑或者删除的文件,不包括新添加的文件。

git add -f /test/  表示对test目录下的文件进行添加

查看内容缓存状态

git status 命令用于显示工作目录和暂存区的状态。使用此命令能看到上次提交之后是否有对文件进行再次修改;
git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log。

 git status -s   简短输出修改文件有哪些
git diff 不加参数即默认比较工作区与暂存区差异

分支管理
1.创建分支命令:

git branch (branchname)

2.切换分支命令:

git checkout (branchname)

3.列出分支

git branch

内容管理

git pull	下载远程代码并合并
git push	上传远程代码并合并
git clone git://github.com/schacon/grit.git mygrit  拉取代码
git reset --hard origin/master  //把HEAD指向最新下载的版本,强制使用远端覆盖本地内容

放弃本地未commit的修改并移除没有track的文件

git checkout . && git clean -df

撤销推送内容

第一步: git log --pretty=oneline  查看当前提交的日志
第二步: git revert commitID    revert你想回退的版本
第三步: 会进入一个新的编辑界面,编写commit的信息
第四步: git log --pretty=oneline   再次查看当前提交的日志
第五步: push 代码(git push或者用AS push)
例如
Linux git环境搭建和常用指令--推送至Github为例_第9张图片

撤销commit文件

git log --pretty=oneline          查看当前提交的日志。
git reset --hard 提交id           撤销指定提交ID的commit文件。
git log --pretty=oneline          查看是否撤销成功。

例如:
Linux git环境搭建和常用指令--推送至Github为例_第10张图片

git提交本地内容到新分支

1.新建分支

git branch xxx (xxx填写你的分支名称)

2.查看所有分支

git branch -a

3.切换到某一分支

git checkout xxx (xxx填写要切换的分支名称)         git checkout . 则清除本地未添加到缓冲区的内容

4.添加修改代码到缓存(注意最后的"."前面有个空格)

git add .

5.添加提交代码的备注

git commit -m "xxx" (xxx为本次提交代码的备注)

6.提交代码到指定分支(提供本地分支—常用)

git push origin xxx (xxx为要提交代码的分支名称)

git撤销本地内容修改

1. 未使用 git add 缓存代码时。

可以使用 git checkout – filepathname (比如: git checkout – readme.md ,不要忘记中间的 “–” ,不写就成了检出分支了!!)。
放弃所有的文件修改可以使用 git checkout . 命令。
此命令用来放弃掉所有还没有加入到缓存区(就是 git add 命令)的修改:内容修改与整个文件删除。
但是此命令不会删除掉刚新建的文件。因为刚新建的文件还没已有加入到 git 的管理系统中。所以对于git是未知的。自己手动删除就好了。

撤消工作区编辑

撤消之前未add的所有修改

git reset --hard HEAD

2. 已经使用了 git add 缓存了代码。

可以使用 git reset HEAD filepathname (比如: git reset HEAD readme.md)来放弃指定文件的缓存,
放弃所有的缓存可以使用 git reset HEAD . 命令。
此命令用来清除 git 对于文件修改的缓存。相当于撤销 git add 命令所在的工作。
在使用本命令后,本地的修改并不会消失,而是回到了如(一)所示的状态。继续用(一)中的操作,就可以放弃本地的修改。

3. 已经用 git commit 提交了代码。

可以使用 git reset --hard HEAD^ 来回退到上一次commit的状态。
此命令可以用来回退到任意版本:git reset --hard commit_id 其中commit_id可以通过git log去查询。

git中文手册地址

https://git-scm.com/book/zh/v2

常见问题

问题1

问题: error: failed to push some refs to。。。
原因:别人推送了代码。

git reset --soft HEAD^ 
git stash
git pull
git stash pop
git push -u origin master

问题2

git提交时报错:Updates were rejected because the tip of your current branch is behind

使用强制推送

 git push -u origin master -f

问题3

error: Pulling is not possible because you have unmerged files.

  1. 将本地的冲突文件冲掉,不仅需要reset到MERGE-HEAD或者HEAD,还需要–hard。没有后面的hard,不会冲掉本地工作区。只会冲掉stage区。
git reset --hard FETCH_HEAD
  1. 接着执行下面命令,就会成功。
git pull

问题4

ssh: connect to host port 22: Connection refused

原因:
远程服务器地址错误
或者
没有设置公私秘钥

解决:
1.远程服务器地址错误

git remote rm origin
 
git remote add origin [url]

2.如果没有设置公钥
则回到最开始设置公钥教程的地方

ssh-keygen -t rsa -C "[email protected]"

并打开公钥 id_rsa.pub,复制里面的 key,把内容拷贝到github,或者gitlab的设置密钥栏内。

问题5

我想把本地合并后的master push到远程master上,但是出现了master -> master (non-fast-forward)错误

Linux git环境搭建和常用指令--推送至Github为例_第11张图片

解决办法:当代码提交的本地仓库,或者说只要本地仓库的代码已经是最新的时候,我们只需执行下面的指令:
在这里插入图片描述

这样就可以解决master -> master (non-fast-forward)的错误。

一定要记得:在执行push操作前,一定要有pull的操作,不管是那一分支都应该有pull的操作,所以,我在merge的时候,会将master pull下来,然后在执行git push --force 地址的操作

你可能感兴趣的:(其它,git,github,linux)