Git 使用心得

Git是现在最流行的版本管理工具, 其实学习的成本挺高的, 很多的入门的教程讲的都非常的坑, 比如尽量用的rebase代替pull, 当时我在想, 你说的我都懂, 但是具体应该怎么做呢, 我看了好久终于搞懂了, 我希望的教程都把看的人当sb一样来看, 该写的命令, 一句不落, 而不是一笔带过, 本文大概分为以下几部分

Git软件下载地址

Git

这是git的核心工具
官网: git-scm.com
下载: 在官网下载, 若官网不能访问, 点击这里

SourceTree

是git的辅助工具, 类似的还有TortoiseGit, 当然我选择SourceTree
官网: www.sourcetreeapp.com

Git在项目中的流程

一般来说都是项目管理人员新建仓库(一般都会新建两个保护分支 主分支master和开发分支develop, 既然是保护分支对项目的其他人员都是只读的, 甚至是不可见的) 然后推送到远程仓库, 项目的其他人员, 从远程仓库clone, 项目参与人员根据任务的编号建立任务分支(任务分支一般都是以develop分支为基础建立, 我们公司是以’#’+任务编号, 来确定任务分支名称, 如40号任务, 任务分支名称就为”#40“), 任务做好测试之后, 把分支推送到项目仓库, 项目管理人员就把任务分支合并develop分支进行整合测试, 确定没有问题之后合并到master分支, 生产环境直接拉取master分支就行了
当然还有其他的项目人员肯定要和远程仓库同步了, 就是重新拉取远程仓库的内容, 以develop保证内容最新, 减少冲突

Git常用的操作

上面的项目流程中,特殊标记的就是常用的操作
我工作中基本上就只用到这些, 这些还是比较熟练的, 上面已经说明了使用的场景需求
远程仓库以osc(git.oschina.net/)为远程仓库

新建一个仓库

在osc上面新建一个仓库
《Git 使用心得》

右键 > git bash

// 自己在本地新建仓库
git init
// 新建项目的说明文件
echo "this is a demo" >> README.md
// 把说明文件添加并提交
git add README.md
git commit -m "first commit"
// 新建master,develop分支
git checkout -b master
git checkout -b develop
// 添加远程的仓库
git remote add origin https://git.oschina.net/xsu/demo.git
// 推送分支到远程, 会弹出验证框让你输入帐号和密码
git push origin master
git push origin develop

《Git 使用心得》

项目开发人员: 从远程仓库克隆, 再操作

// 克隆, 需要输入有权限的帐号和密码
git clone https://git.oschina.net/xsu/demo.git
// 这步是查看clone下来的分支的, 可以看到包含刚才新建的master和develop分支
$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/master

// 新建任务是以origin/develop为基准, 命令会新建并切换到任务(#40)
git checkout origin/develop -b "#40"
// 查看本地的分支, 当前分支是新建的分支
$ git branch
* #40
  master
// 就在任务分支上作业
// 添加修改的文件
git add <filename> / git add * 
// 提交修改, 提交是提交到本地
git commit -m "你的注释"
// 然后推送到远程
$ git push origin "#40"
Total 0 (delta 0), reused 0 (delta 0)
To https://git.oschina.net/xsu/demo.git
 * [new branch]      #40 -> #40

项目管理人员: 合并删除刚才推送上来的分支

//合并: rebase和merge都可以完成合并, 区别请参考progit, 合并的时候推荐不推荐用命令行, 使用gui工具更方便
git checkout develop
git rebase/merge origin/#40
git push origin develop
// 删除, 这语法可能非常扯, 这tmd竟然是删除
$ git push origin :#40
To https://git.oschina.net/xsu/demo.git
 - [deleted]         #40

项目开发人员: 从远程更新

// 远程把作业分支合并到develop分支之后, 本地需要更新
$ git fetch -p origin
From https://git.oschina.net/xsu/demo
 x [deleted]         (none)     -> origin/#40
// 手动删除自己本地的分支
git branch -d "#40"

然后又是新建任务分支, 推送, 合并, 项目就这样推进了
项目管理人员和项目开发都可以是同一个人, 上面的步骤就少了更新的步骤

Git常用的概念

参考progit

使用密钥代替密码

上面的操作中是需要输入帐号密码的, 这种方式非常的不方便, 其实可以用密钥代替

osc端

打开git bash

cd ~/.ssh
ssh-keygen -t rsa -C "999999@163.com"

《Git 使用心得》
在红框处输入你想取的名称, 我输入osc,
然后在我的电脑的地址栏中输入 %userprofile%/.ssh
是不是看到了oscosc.pub两个文件
打开osc.pub, 全选,复制到个人资料这里
《Git 使用心得》

pc端

新建文件,取名为config, 内容如下

# oschina
Host oschina
    HostName git.oschina.net
    User jaime
    IdentityFile ~/.ssh/osc

测试

我那里的hostnam是oschine, 以后所有用到git.oschina.net的地方都改为oschina. https改为git
成功就是

$ ssh -T git@oschina
Welcome to Git@OSC, xsu!

失败如下

$ ssh -T git@oschina
Permission denied.
// 添加远程的仓库
git remote add origin https://git.oschina.net:xsu/demo.git
修改为
git remote add origin git@oschina:xsu/demo.git

之前是clone的仓库改为

git clone git@oschina:xsu/demo.git

如果已经克隆, 修改远程仓库地址为

git remote remove origin
git remote add origin git@oschina:xsu/demo.git

当然这些的前提是 你要有这个仓库的权限

如果TortoiseGit想使用密钥的话, 必须右键 > TortoiseGit > settings
《Git 使用心得》
ssh.exe的地址为 git的安装目录/usr/bin

工作中常用的命令

git init
git add <file>
git comit -m "<msggggg>"
git status
git log从最近到最远的提交日志, 
git log --pretty=oneline 显示到一行
git reset版本回退
git reset --hard HEAD^ 回退到上一个版本,几个^回退到上几个版本 
git reset --hard 80fed6a 回退到hash开头为 80fed6a 的那个版本, 版本号没必要写全,前几位就可以, 不会保留更改
git reset --soft 80fed6a 回退到hash开头为 80fed6a 的那个版本, 但是保留更改
git diff查看修改的内容, 使用TortoiseGit来查看, 不要使用这个命令查看
git push origin <branch_name>
git fetch 获取remote内容
git fetch -p origin 获取的时候删除已经删除的分支
git rebase/merge <branch> 把<branch> 合并/基变 到当前分支, 请使用rebase替代merge
git branch <branch> 新建分支
git checkout <branch> 切换到分支
git checkout -b <branch> 新建并且切换到分支, 可以代替上面2条命令

合并/基变 代码

git rebase/merge <branch>
# 如果有冲突, 就需要
# 修改冲突, 然后
git add # 提交冲突
git rebase/merge --continue # 继续执行基变或者合并, 直到合并完成或者
# 终止合并
git rebase/merge --abort

撤销commit

# 在本地先回退更改
git reset --hard <版本号>
# 然后推到服务器
git push origin <branch> --force
# 如果不加force会报错, 提示branch的本地的版本落后于远端的版本

本文不是git的教程, git的基础一定要看啊

    原文作者:优de良
    原文地址: https://segmentfault.com/a/1190000007246729
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞