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
合并¶
当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