Git基于命令行的常规操作
初始化本地git环境
#!/bin/bash
username=$1
email=$2
git=/usr/bin/git
if [ $# -ne 2 ];then
echo $"Usage:$0 <Username> <Email>"
exit 2
fi
$git config --global user.name "$username"
$git config --global user.email "$email"
$git config --global color.ui true
$git config --global alias.olog "log --pretty=oneline"
$git config --global alias.plog "log -p"
说明:SHA1:是git 对象中的40位hash编码数
文件提交
Git add index.html(多个文件,就用点号.)
Git commit –m “add index.html”
文件重命名
[root@localhost test]# git mv pay.html pay.php
[root@localhost test]# git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
renamed: pay.html -> pay.php
撤销工作区的修改
git checkout -- news.html
从暂存区中删除,工作目录保留
git rm --cached test.bin
撤销提交到工作区(版本回退到工作区)
git reset --mixed HEAD^ 或者 git reset --mixed SHA1
撤销提交到暂存区(版本回退到暂存区)
Git reset –soft HEAD^ 或者 git reset –soft SHA1
将工作区、暂存区和版本库恢复到指定版本
[root@localhost test]# git reset --hard cd6495c
HEAD is now at cd6495c news01.html
(执行这个操作,做好在其他窗口执行git log –oneline)
查看某个文件的散列值和版本库里的内容
[root@localhost test]# git hash-object -w about3.html
641d57406d212612a9e89e00db302ce758e558d2
[root@localhost test]# git cat-file -p 641d57
111
222
333
查看某个文件是谁提交或谁修改的
作用:查看文件内容是谁添加
案例:我想查看about3.html这个文件第二行是谁提交的
[root@localhost test]# cat about3.html
111
222
333
[root@localhost test]# git blame about3.html -L 2,+1
400fa95a (louis 2018-04-19 15:52:20 +0800 2) 222
查看某个文件的修改历史
git log -C news.html
提交查找
[root@localhost test]# git grep --name-only news (查看包含news的文件名)
news.html
news01.html
[root@localhost test]# git grep -n news (查看包含news的文件名,并显示该内容在第几行)
news.html:1:news center
news01.html:1:news center
分支管理
本地新建分支
[root@localhost test]# git branch dev
[root@localhost test]# git checkout dev
Switched to branch 'dev'
注意:我们可以基于任意一次提交来创建分支
[root@localhost test]# git log --oneline
dd97293 rename pay.html pay.htm
cd6495c news01.html
b20d55e add detail.html
400fa95 squash commit about3.html
c9bd929 abount2
bbe4912 about
7fecdff pay
9770bad news
72dc15a first commit
[root@localhost test]# git branch pay 7fecdff
[root@localhost test]# git checkout pay
Switched to branch 'pay'
[root@localhost test]# ll
total 12
-rw-r--r--. 1 root root 0 Apr 23 13:16 clib.a
drwxr-xr-x. 2 root root 45 Apr 23 13:19 doc
-rw-r--r--. 1 root root 31 Apr 19 16:11 index.html
-rw-r--r--. 1 root root 12 Apr 23 14:53 news.html
-rw-r--r--. 1 root root 26 Apr 23 16:27 pay.html
-rw-r--r--. 1 root root 0 Apr 23 10:23 test.bin
-rw-r--r--. 1 root root 0 Apr 23 13:14 test.o
删除分支
对于已经合并的分支 git branch –d dev
对于没有合并的分支 git branch –D dev
分支重命名
git branch –m dev Dev
查看哪些分支没有被合并
Git branch –no-merged
分支储藏
作用:当你正在一个分支上写代码,但是此时突然有个紧急事情需要处理,然后当前分支上的代码又不能提交,这个时候就会用到储藏的功能
[root@localhost test]# touch stash.txt
[root@localhost test]# echo "statsh:add1" >> stash.txt
[root@localhost test]# git add stash.txt
[root@localhost test]# git stash (把之前没有提交的代码暂存起来)
Saved working directory and index state WIP on dev: dd97293 rename pay.html pay.htm
HEAD is now at dd97293 rename pay.html pay.htm
[root@localhost test]# git checkout -b bug (然后切换到其他分支,开始修复bug,修复完毕后,合并到主分支)
Switched to a new branch 'bug'
[root@localhost test]# git checkout dev (bug修复完,并合并到主分支后,然后再切换到dev分支,开始之前的开发)
Switched to branch 'dev'
[root@localhost test]# git stash pop 弹出
[root@localhost test]# git stash list
如果不知道想要恢复分支的散列值,可以通过reflog
[root@localhost test]# git reflog
dd97293 HEAD@{0}: checkout: moving from bug to dev
dd97293 HEAD@{1}: checkout: moving from dev to bug
dd97293 HEAD@{2}: checkout: moving from master to dev
合并分支(merge)
一) 快进式合并
[root@localhost test]# git branch -a
bug
* dev
master
pay
[root@localhost test]# git commit -m "add stats"
[dev 1cef480] add stats
1 file changed, 1 insertion(+)
create mode 100644 stash.txt
[root@localhost test]# git checkout master
Switched to branch 'master'
[root@localhost test]# git merge dev
Updating dd97293..1cef480
Fast-forward
stash.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 stash.txt
二) 合并提交
场景:当主分支和dev分支同时又内容提交的时候,我们需要把dev分支合并到master分支,这个时候使用git merge,就会生成一个新的commit对象
Git merge dev
压合合并
场景:将一个分支上的所有历史提交合并成一个提交,然后合并到另一个分支,一般用于修改bug或某个小型功能分支
git merge –squash bug
git commit
分支衍合
场景:基于某个开源软件做二次开发。当我们在基于开源软件做二次开发的时候,这个时候开源软件master分支也在不断的更新,此时我们需要使用开源软件的master分支,我们就可以通过git rebase把master分支合并到我们的分支上
1)先切换到自己的分支(dev)
2)Git rebase master
推送分支到远程
[root@linux7-node2 app01]# git checkout dev
Switched to branch 'dev'
[root@linux7-node2 app01]# git push origin dev:dev
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 293 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@git.51yuki.cn:java01/app01.git
* [new branch] dev -> dev
拉取远程分支并创建本地分支
[root@linux7-node2 app01]# git fetch origin bug:Newbug (远程分支bug,本地分支Newbug)
该方法本地不会自动切换到Newbug分支
基于本地分支建立一个于远程分支的关联
[root@linux7-node2 app01]# git branch -a
Newbug
* dev
master
remotes/origin/dev
remotes/origin/master
[root@linux7-node2 app01]# git checkout Newbug
[root@linux7-node2 app01]# git push origin Newbug:bug
Everything up-to-date
[root@linux7-node2 app01]# git branch -a
* Newbug
dev
master
remotes/origin/bug
remotes/origin/dev
remotes/origin/master
- 第一部分:Git的基本操作
- 第一章:git软件的安装
- 第一节:在centos6.8上安装git-2.3
- 第二节:在windows上安装git-bash和TortoiseGit软件
- 第二章: Git的基本概念
- 第一节:git的基本操作
- 第二节:git的深入理解(内部运行机制)
- 第三章:git的文件管理
- 第一节:文件的添加及提交
- 第二节:文件的删除、回退等
- 第三节:忽略指定格式的文件
- 第四节:撤销本地仓库的修改
- 第四章:git的commit对象深入理解
- 第一节:查看提交历史(git log)
- 第二节:提交查找(git grep)
- 第三节:git版本库回退
- 第五章: Git分支管理
- 第一节:分支的概念及基本使用
- 第二节:Git分支管理策略
- 第三节:Git分支合并
- 第四节:推送本地分支到远程分支
- 第七章: Git常用命令详解
- 第一节:git fetch命令
- 第二节:git pull命令
- 第三节:git push命令
- 第四节: git merge命令
- 第五节:git rebase命令
- 第八章:远程仓库管理
- 第二部分: gitlab版本控制系统
- 第一节:"远程仓库”版本回退解决方案
- 第二节:远程分支和本地分支
- 第九章:Git冲突解决
- 第十章:客户端操作
- 第十章:git常规操作
- 第一章:安装gitlab服务器
- 第一节:在centos系统上安装
- 第二章:配置GitLab服务器
- 第一节:关闭gitlab注册功能
- 第二节:在gitlab上创建项目、组、用户
- 第三节:汉化gitlab
- 第四节:gitlab配置邮箱通知
- 第五节:gitlab配置https访问
- 第三章:使用过程常见的故障
- 第三部分: gogs版本控制系统
- 第一章:在centos6上基于二进制包安装gogs软件
- 第二章:gogs服务器的配置
- 第一节:gogs服务器上创建项目、用户
- 第二节:nginx反代gogs,通过https
- 第三节:gogs启动脚本
- 第四节:git保存密码到本地
- 第三章:gogs服务器的备份和恢复
- 第一节:gogs备份操作