访问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比较工作空间和远端分支的差异