Git在工作中的基本使用

简单介绍

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。本文主要是针对命令行工具来介绍Git在平常工作的使用。

全局配置


配置提交后显示的用户名与邮箱

$ git config --global user.name "lxy"  
$ git config --global user.email lxy@qq.com 

配置命令别名

sudo git config --system alias.st status    #git st 查看提交状态
sudo git config --system alias.ci commit  #git ci 提交
sudo git config --system alias.co checkout  #git co 切换分支或提取代码
sudo git config --system alias.br  branch #git br 分支

查看配置

git config --list

一、基本使用


1.1 从远程仓库clone一份代码到本地,假设你桌面有个空文件夹名为:test
// 进入你要存放代码的文件夹
cd test
// 克隆代码
git clone ***.git
1.2 把所有更改过的文件添加到暂缓区
git add .  // 注意,add与.之间有一个空格
1.3 查看当前版本状态
git status  // 查看当前版本状态(是否修改)
1.4 提交代码
git commit -m "本次修改新简要说明"     // 提交
1.5 拉取远程代码,检验本地是否是最新版
git pull // 默认拉取的是你当前所在分支所关联的远程分支,如这里拉取的为 oringin master分支

拉取代码下来后,再用git status查看当前版本状态,如果有冲突或修改,改到相应的位置修改后再重复1.2-1.4步骤.

1.6 推送代码到远程服务器
git push //默认推送到的是你当前所在分支所关联的远程分支,这里是oringin master分支
1.7 查看文件哪一行是谁修改的(方便查找背锅侠)
git blame  filepath(文件路径)
1.8 暂存区缓存清除。
git rm -r --cached .  // 修改忽略文件后,执行此命令,再执行git add .这些即可

二、分支管理


2.1 查看本地分支
git branch // 显示本地分支

如下:


Paste_Image.png
2.2 查看所有分支,包括远程的
git branch -a // 显示所有分支
一个主分支master 一个develop开发分支,另一个是同事的分支
Paste_Image.png
2.3 新建本地分支
git branch 分支名 

git checkout -b 新分支名 旧分支名 如:git checkout -b 2.1.3 2.1.2 从2.1.2中新建2.1.3分支
2.4 切换分支
git checkout develop //切换到develop分支
2.5 合并分支代码
方法一:get rebase
不会生成一次新的commit去提交,直观。
git rebase master 合并分支
git rebase 提交版本号(git log或git reflog查看) // 合并别人提交的
方法二:get merge
会生成一次新的commit去提交(即,用sourceTree或git log --graph查看,会有多条线)
git merge master //合并master分支下的代码到当前分支
git merge --abort 回滚到合并前的状态

设置某一分支使用git pull时,应用的是rebase操作
git config branch.[分支的名字].rebase true
2.6 删除分支
git branch -d develop // 删除本地develop分支(本分支已修改并合并到其它分支)
git branch -D develop // 强制删除本地develop分支
git push origin:develop  // 删除远程develop分支,慎用
2.7 本地分支与远程分支关联
1.本地新分支推送到远程
git branch 本地新分支名
git push origin 本地新分支名:远程分支名 // 若远程无此分支,自动创建

2.远程分支新建到本地
// 使用下面这条,自动关联上
git fetch 远程分支:本地新建的分支名
如
git fetch origin 2.1.5:local2.1.5
git checkout local2.1.5
git branch --set-upstream-to origin/2.1.5
或者
git fetch origin 2.1.5:local2.1.5
git branch --set-upstream-to origin/2.1.5 local2.1.5 // 一句完成,不用切分支
2.8 克隆远端分支到本地
git clone git仓库地址 本地文件夹名 -b 分支名
如:
git clone xxx.git appios213 -b 2.1.3 // 会在你当前目录下创建一个appios213文件夹,然后克隆2.1.3版本到这个文件夹中
2.9 抓取远程分支到本地别的分支

git fetch 远程分支:本地新建的分支名

如:
cd 2.1.5文件夹
git fetch origin 2.1.3:2.1.3

// 如果是在2.1.5中执行这条,则本地会有2.1.3与2.1.5两个本地分支

2.10 查看分支的最后一次提交log
git branch -v 

三、版本备份


版本备份也就是打标签。

3.1 查看标签
git tag  // 显示已存在的tag
3.2 增加tag标签
git tag -a v4.6 -m '4.6发布版本'     // 增加v4.6的tag
3.3 推送标签到远程服务器
git push --tags           // 推送所有的tag到远程服务器
3.4 删除远程tag
git push origin :refs/tags/0.0.1 // 删除远程tag
3.5 根据标签拉取代码
git checkout v4.6 // 把4.6发布的版本拉出来,这样可以做到定位版本修改bug

四、版本回退


4.1 本地回退
1.打印本地提交的记录   
git log
2.记录每一步的叫什么
git reflog
3.回退到commit前一步,即取消commit操作
git reset --soft [版本号]
4.回退到你复制出来的版本记录(本次的commit后的均消失)
git reset --hard [版本号]  // 这里的版本号为commit后面一串数字
4.2 远端回退
如果远端你也要一起回退,这时可以用上面的方法先本地回退好,然后强制push当前版本到远端即可
git push --force
4.3 快速回退一些命令
1. 回退所有内容到上一个版本
git reset head^
2. 回退某一个文件到上一个版本,如回退delegate.m文件
git reset head^ delegate.m
3. 向前回退到第3个版本
git reset --soft head~3
4. 将本地的状态回退到与远程的一样
git reset --hard origin/master

git reset --hard [commitId] 回滚上次提交,且工作,暂存区域都回滚
git reset --soft [commitId] 把高于指定的提交的内容回退到暂存作区域,即只回退了commit操作
git reset --mixed [commitId] 把高于指定的提交的内容回退到工作区域(默认),即回退了add与commit两个操作

五、Git的高级用法

出现误操作

git reflog #记录每一步操作
git reset [commited]

找到问题的背锅者

git blame [filePath]

cherry-pick的使用:合并某次commit。

git cherry-pick <commit id> // 只合并某一次或某几次的提交
// 例如
git cherry-pick e71f9ae29a32ddc22d401cbed7db1210a3d60881

因为git中把commit删了后,并不是真正的删除,而是变成了悬空对象(dangling commit)。我们只要把把这悬空对象(dangling commit)找出来,用git rebase也好,用git merge也行就能把它们给恢复。

git fsck --lost-found // 如reset后的,一些提交还是可以合并进来的

推荐阅读更多精彩内容