1.1. Git基础操作

1.1.1. Git 仓库安装

1、安装Git

yum install git

2、创建Git用户并设置密码

useradd git
passwd git

3、创建仓库

# 切换用户
su - git
# 创建库目录
mkdir -p repos/app.git
# 进入库
cd repos/app.git
# 初始化仓库
git --bare init

4、客户端操作:配置SSH免密码认证

# 创建秘钥对
ssh-keygen
# 查看公钥
cat ~/.ssh/id_rsa.pub


# git服务器操作:复制公钥到git服务器的git用户的秘钥文件内

# 切换用户
su - git
# 创建目录
mkdir .ssh
# 赋予目录权限
chmod 700 .ssh
# 创建公钥文件
touch .ssh/authorized_keys
# 赋予文件权限
chmod 600 .ssh/authorized_keys
# 将公钥复制到该文件下
vi .ssh/authorized_keys
.....

1.1.2. 客户端操作

客户端操作:提交代码

# 1、拉取仓库
git clone git@118.31.225.36:/home/git/repos/app.git

# 2、创建文件
cd app
touch index.html

# 3、提交制定本地文件
git add .

# 4、查看制定本地提交文件
git status

# 5、提交本地版本仓库 “1” 为注释
git commit -m "1"

# 6、如果未添加邮箱需要添加
git config --global user.name "huanli"
git config --global user.email 1879324764@qq.com

# 7、提交到git库主分支
git push origin master

1.1.3. 修改和撤销、合并

经过实验,发现可以使用三种方法撤销修改(在已经add到暂存空间的情况下)

1.$ git reset HEAD$ 然后 git checkout -- readme.txt

2.$ git reset --hard HEAD

3.$ git checkout HEAD -- readme.txt

查了一下:

1. git log 然后查看并复制上一版本的版本号

2. git reset 此时版本库中该文件已回退上一版本

删除

1.如果你用的rm删除文件,那就相当于只删除了工作区的文件,如果想要恢复,直接用git checkout -- 就可以

2.如果你用的是git rm删除文件,那就相当于不仅删除了文件,而且还添加到了暂存区,需要先git reset HEAD ,然后再git checkout --

3.如果你想彻底把版本库的删除掉,先git rm,再git commit 就ok了

分支

查看分支:
$ git branch

创建分支:
$ git branch

切换分支:
$git checkout

创建+切换分支:
$ git checkout -b

合并某分支到当前分支:
$ git merge

删除分支:
$ git branch -d


检出 Pull Requests对 Github 仓库来说,Pull Request 是种特殊分支, 可以通过以下多种方式取到本地:
取出某个特定的 Pull Request 并临时作为本地的 FETCH_HEAD 中以便进行快速查看更改( diff )以及合并( merge ):

$ git fetch origin refs/pull/[PR-Number]/head

# Github PR代码到本地分支
$ git fetch origin pull/1941/head:repack-org-apache
$ git checkout repack-org-apache


通过 refspec 获取所有的 Pull Request 为本地分支:
$ git fetch origin '+refs/pull/*/head:refs/remotes/origin/pr/*'


或在仓库的 .git/config 中加入下列设置来自动获取远程仓库中的 Pull Request

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:tiimgreen/github-cheat-sheet.git
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:tiimgreen/github-cheat-sheet.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

对基于派生库的 Pull Request,可以通过先 checkout 代表此 Pull Request 的远端分支再由此分支建立一个本地分支:

$ git checkout pr/42 pr-42
操作多个仓库的时候,可以在 Git 中设置获取 Pull Request 的全局选项。

$ git config --global --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*"
此时可以在任意仓库中使用以下命令:

$ git fetch origin
$ git checkout pr/42

进一步了解如何本地检出 pull request.

合并

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

用git log --graph命令可以看到分支合并图

1.1.4. Git pull遇到错误

当本地代码自己修改后与远程仓库最新分支代码不一致时,可以如下处理方式

方法1: 如果你想保留刚才本地修改的代码,并把git服务器上的代码pull到本地(本地刚才修改的代码将会被暂时封存起来)

git stash
git pull origin master
git stash pop

如此一来,服务器上的代码更新到了本地,而且你本地修改的代码也没有被覆盖,之后使用add,commit,push 命令即可更新本地代码到服务器了。

方法2: 如果你想完全地覆盖本地的代码,只保留服务器端代码,则直接回退到上一个版本,再进行pull:

git reset --hard
git pull origin master

1.1.5. 应用场景1

开发过程中经常用到从master分支copy一个开发分支

步骤:
1.切换到被copy的分支(master),并且从远端拉取最新版本
$git checkout master
$git pull

2.从当前分支拉copy开发分支
$git checkout -b 分支名

3.把新建的分支push到远端
$git push origin 分支名

4.关联
$git branch --set-upstream-to=origin/分支名 分支名

5.再次拉取验证
$git pull

1.1.6. 应用场景2

在本地创建自己的分支

1. 在本地创建自己的分支
$ git branch dev_lsw


2. 同步分支到github上面
$ git push origin dev_lsw

3. 本地当前应该是master分支,切换到自己的分支上,然后把本地分支和远程分支做关联
$ git checkout dev_lsw
$ git branch --set-upstream-to origin/dev_lsw




4. 使用git branch -vv命令可以看到
* dev_lsw 28d9b82 [origin/dev_lsw] Change Chinese comments into English
  master  86f52f7 [origin/master] Merge pull request #2 from shiwei-li/master
表面分支关联成功

1.1.7. 参考资料

https://www.runoob.com/git/git-tutorial.html