Git的正确使用姿势

访问github加速的方法: fastgithub

从 https://github.com/dotnetcore/fastgithub/releases 下载 fastgithub_win-x64
解压后打开FastGithub.UI.exe就可以正常访问github了

推荐拉取前自动变基

这样可以解决git历史里面有太多的冲突记录

git config --global pull.rebase true   //配置拉取自动变基
git config --global rebase.autoStash true  //配置变基前自动存储,变基后自动pop

git rebase --continue //变基有冲突, 解决后, 继续变基

1,Git基本命令

基本命令

获取最后一次的提交
git clone http://yizhe@192.168.1.190:30010/xk2/Xk2Zszy.git --depth=1

方法1,先初始化再关联远程仓库
git init  
git remote add origin https://github.com/xxxx.git   #关联到远端

方法2,直接克隆
git clone https://github.com/xxxx.git  #git clone到本地默认会创建master分支并跟踪远端的master分支

添加和提交
git add README.md  
git commit -m "first commit"  

与远端交互
git push -u origin dev #推送dev分支到远端,并跟踪(-u)
git pull #拉取(自动合并)

贮藏与取回
git stash           多人协助时强烈推荐使用此命令:  代码提交前先贮藏, 再拉取, 再取回, 这样可以减少git自动执行的分支合并
git stash pop

分支  
git branch  
git checkout -b test origin/Test  #从远端的Test(区分大小写)分支新建test分支
git checkout -b dev #从当前分支创建分支dev,并切换到dev分支  
git checkout dev #切换到dev分支
git branch -vv  #查看分支所跟踪的远端分支

日志  
git log --graph --pretty=oneline --abbrev-commit

撤销本地未提交的修改
git checkout .

撤销已经commit但是没有push的修改
git reset --hard commit_id
或者
git reset --hard origin/master

记着:只要没有push,本地可以随便编辑

2,Git教程

廖雪峰老师的Git教程
https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

一个成功的Git分支开发模型
https://blog.youkuaiyun.com/qq_34651940/article/details/51891767

《一个成功的Git分支开发模型》为什么是有害的
https://www.jianshu.com/p/748e4892871a

3,Git的正确使用姿势

使用Git遇到的问题

1,提交内容混乱:大量散乱的commit
2,很多合并导致的无意义提交,例如 “Merge branch ‘xxxbranch’ of xxxxx”
3,主分支(mater,dev等)之间的频繁合并带来的使用困难

解决办法如下

1,开发模式修改

  • 主分支只有master分支,在它上面开发
  • 每个发布周期都从master分支产生新的release分支
  • release先用于测试,测试通过后用来发布,在发布前打上tag,例如:V1.1.5
  • 测试中的bug根据情况选择分支master或release修改后合并
  • 发布之后,只在客户对应的release分支修改bug,回签到master
    在这里插入图片描述

2,必须的默认配置

git config --global pull.rebase preserve   #拉取并变基,配置后pull时会变基到远端最新的commit

3,直接在主分支(master)上开发的场景模拟

  • master分支跟踪远端
  • 一天的开发过程中常规性的commit多次
  • 下班前对commit信息进行合并:git rebase -i origin/master
  • pull #拉取并变基(有冲突就解决)
  • push (也可以先push,如果push不了,就pull后再push(有冲突就解决后push))

4,在私人的工作分支上进行开发的场景模拟(推荐)

  • master分支跟踪远端
  • 签出本地工作分支f1
  • 一天或几天的开发过程中常规性的commit多次,下班前吧f1推送到远端(或不用)
  • push前对commit信息进行合并:git rebase -i master
  • 切换到master分支,merge
  • pull #拉取并变基(有冲突就解决)
  • push (也可以先push,如果push不了,就pull后再push(有冲突就解决后push))

5,在变基过程中出现冲突怎么处理?
首先找到全部有冲突标记(<<<<<<)的地方, 把代码修改好
再执行 git add . #标记已经解决冲突了
再执行 git rebase --continue

如果进行到一半不想变基了,执行: git rebase --abort

关键配置和命令

git config --global pull.rebase preserve  #拉取并变基,配置后pull时会变基到远端最新的commit

git rebase -i origin/master   #合并本地commit,可以设置如下的别名
git config --global alias.tidy "rebase -i @{upstream}"  #配置别名
git tidy  #设置别名后的用法

配置文件位于:用户/.gitconfig

[pull]
	rebase = preserve
[alias]
	tidy = rebase -i @{upstream}
	cm = commit -m
	ac = "!git add . && git commit -m "
	lg1 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)  %C(cyan)%ad%C(reset)' --all
    lg2 = log --graph --abbrev-commit --decorate --format=format:'%C(bold blue)%h%C(reset) - %C(bold white)%s%C(reset) %C(dim white)- %an%C(reset) %C(bold yellow)%d%C(reset)%n''          %C(cyan)(%ar)%C(reset) %C(cyan)%ad%C(reset)' -10 --all
    lg = !"git lg1 -20" 

[log]
	date = format:%Y-%m-%d %H:%M:%S

关于Git分支和常用命令
我们clone代码到本地之后会保存成两个分支
本地分支(master)和远端分支(origin/master)
我们所有的修改都会在本地分支中进行
Fetch操作会更新远端分支
Merge会将远端分支中的修改合并到本地分支
Pull = Fetch + Merge
Push会把本地分支推送到服务器

关于差异比较
在Git的理念中本地分支和远程分支地位是一样的,所以在SVN中跟服务器的比较功能在Git中没有
执行git diff 的时候是工作空间和本地分支比较
Commit之后,工作空间和本地分支就没有区别了,git diff就没有结果
使用Fetch更新远端分支后可以用git diff origin/master比较工作空间和远端分支的差异

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值