Git常用命令(clone/add/commit/push/fetch/merge/pull/submodule)

git底层采用的是SHA-1算法(哈希)
git分支管理的本质是创建和移动指针

git 签名

//项目级别:仅在当前本地库范围内有效
//签名信息保存在 cat ./.git/config
git config username lijj_pro
git config user.email 123456789@163.com
//系统用户级别:登陆当前操作系统的用户范围
//签名信息保存在 cat ~/.gitconfig
git config --global username lijj_glb
git config --global user.mail 123456789@163.com

git 提交

//查看工作区、暂存区状态
git status
//将工作区的新建/修改添加到暂存区
git add [filename]
//将暂存区的内容提交到本地库
git commit -m "commit message" [filename]

查看历史记录

// 完整的日志,需要翻页
git log
// 完整hash
git log --pretty=oneline
//一部分的hash,只显示过去的版本记录
git log --oneline
//一部分的hash以及HEAD@{到当前版本需要的步数},显示所有版本记录
git reflog

版本前进后退

//基于hash后退或前进
git reset --hard [hash]
//使用^只能后退,一个^表示后退一步,n个表示后退n步
git reset --hard HEAD^
//使用~只能后退,~[num]表示后退num步
git reset --hard HEAD~[num]

git reset --[soft|mixed|hard]

//仅仅在本地库移动指针(本地库后退了,但是暂存区和工作区不变,git status显示绿字modified是因为本地库里的是旧的,显得暂存区往前了)
--soft
//在本地库移动HEAD指针,重置暂存区(本地库和暂存区一起后退,git status显示红字是因为本地库和暂存区里是旧的,显得工作区往前了)
--mixed
//在本地库移动HEAD指针,重置暂存区,重置工作区
--hard

工作区误删文件,并且已经提交到本地库,可以通过回退到上一版本找回。

git reset --hard [history-hash-include-deleted-file]

工作区误删文件,并且已经添加到暂存区,直接切到当前HEAD指针指向的版本

git reset --hard HEAD

比较文件

//将工作区文件与暂存区对应的文件进行比较
git diff [file-name]
//app.txt与暂存区中的app.txt比较
git diff app.txt
//添加到暂存区
git add app.txt
//无差异
git diff app.txt
//与本地库中的app.txt比较,有差异
git diff HEAD app.txt

//将工作区中的文件与本地库历史记录比较
git diff [history-version][file-name]
//与上一个版本中的app.txt做比较
git diff HEAD^ app.txt
//不带文件名,比较多个文件
git diff HEAD

分支操作

//创建分支
git branch [branch-name]
//查看所有分支
git branch -v
//切换分支
git checkout [branch-name]
//创建解bug的分支
git branch debugger
//解bug过程
//切换到解bug的分支
git checkout debugger
//解bug
vim app.txt
//添加到暂存区
git add app.txt
//提交到工作区
git commit -m "edit app.txt by debugger branch" app.txt
//切回接受修改的分支,增加新内容
git checkout master
//合并代码
git merge debugger

merge后解决冲突

//当前分支的内容
<<<<<<< HEAD
hhhhhhh edit by master
=======
//另一个分支的内容
hhhhhhh edit by debugger
>>>>>>> master
//解决冲突后
git add app.txt
//提交时不再带文件名
git commit -m "resolve conflict"

推送本地库到远程库

//初始化本地库
git init
//工作区新建文件
vim hushan.txt
//提交文件到本地库
git add huashan.txt
git commit -m "test github" huashan.txt
//查看远端地址别名
git remote -v
//定义远端地址别名origin
git remote add origin git@github.com:happyLiGoGo/huashan.git
//推送本地库到远程库
//git push origin [branch]
git push origin master

克隆

//git clone [远程地址]
git clone origin master

1. 完整把远程库下载到本地
2. 创建origin远程地址别名
3. 初始化本地库

拉取

pull = fetch + merge
git fetch [远程库地址别名] [branch]
git merge [远程库地址别名]/[branch]
git pull [远程库地址别名] [branch]

解决冲突

  • 如果不是基于github远程库的最新版所做的修改,不能推送,必须先拉取
git fetch origin master
git merge origin/master
//或者
git pull origin master
  • 拉取代码后,如果有冲突,则按照“分支冲突解决”操作即可

跨团队协作

  1. 团队外的人点击fork
  2. 团队外的人本地修改,推送到远程
  3. pull request

裸库

//没有工作区,只保留版本信息
git init --bare

子模块submodule

//在主模块中
git submodule add git@github.com:happyLiGoGo/child1.git mysubmoduleg
//添加到版本库并提交
git add .
git commit -m "add mysubmodule"
git push

//拉取单个子模块新版本
cd mysubmodule
git pull
git add .
git commit -m "update mysubmodule"
git push

//拉去所有子模块新版本
git submodule foreach git pull
git add .
git commit -m "update submodules"
git push

//clone
git clone git@github.com:happyLiGoGo/parent.git
git submodule init
git submodule update --recursive

//clone all
git clone git@github.com:happyLiGoGo/parent.git parent2 --recursive

//delete submodule
//先从缓存区中删除
git rm --cached mysubmodule
//从工作区中删除
rm -rf mysubmodule
//删除.gitmodules目录
rm .gitmodules

你可能感兴趣的:(Git)