git学习笔记
简介: Git是一些命令行工具的集合,可以用来跟踪、记录文件的变动,经常用于开源代码。比如你可以进行旧版本恢复、比对、分析、合并等等。这个过程被称之为版本控制。
要提交代码之前,先git pull --rebase 把remote master上的代码更新到本地,可能会有冲突,产生冲突的话,在对应文件处会有<<<<和>>>>来标记出来,然后进去解决冲突,然后git add .添加到暂存区,再输入git rebase --continue,继续解决下一处冲突,直至解决完所有冲突即可。
然后就直接git push origin local-branch-name即可push到远程,但是在合作的时候,不能直接推到远程master上,得先输入git push origin HEAD:refs/for/master%r=xxx(xxx填reviewer的名字),然后代码就会进入code review的阶段,等review完成之后,就可以去开发机所在的网站上,在代码管理器发布版本,然后tce上升级即可。
常用命令:
git config –global user.name 修改姓名
git config –global user.email 修改邮箱
ssh-keygen 产生密钥对,然后cd ~/.ssh切换到密钥目录下面
git clone ssh://.... 将远程仓库克隆在本地
git stash 隐藏工作区,可用于新建bugfix分支之前隐藏工作区,避免将开发一半的功能commit,修复完成bug后,再切换回来git stash pop弹出工作区
git init 在本地创建git仓库
git status 查看当前有哪些文件产生修改,没有提交的文件
git add . 将所有文件添加到暂存区
git commit -m'comment' 提交代码到本地仓库
git reset head^ 将head重置到上一个版本
git checkout -- * 撤销没有在暂存区的修改
git branch 查看当前分支
git branch name 创建新的分支
git checkout namne 切换到其它分支
git merge name 将分支合并到当前分支
git diff 查看修改 git diff test.txt git diff head head^,直接写git diff是查看与暂存区对比
git log 查看head及以前的日志 git log --graph --pretty=oneline可以查看分支的图形化关系
git reflog 查看所有的日志操作记录
git remote add origin https://github.com/tugenhua0707/testgit.git 与远程仓库产生链接
git branch –d name 删除分支
git pull --rebase 更新代码
git remote 查看远程库的信息 创建并切换分支
git checkout -b dev
git revert 撤销某次的提交,并且产生一次新的commit,比如只有一个test.txtx的文件
,内容为111,新增加1行222,然后commit,之后执行git revert head,则还原为111
git rm filename 删除文件,等价于 rm file,git add .两步操作
git checkout -b dev origin/dev 将远程dev分支创建到本地dev分支
git多人协作(重点):
本地的git仓库和远程(例如github)是按照ssh协议传输文件的,ssh使用非对称加密算法(rsa)来保证传输安全。非对称加密要有一个密钥,分别称为公钥和私钥,先用ssh-keygen在本地产生密钥对,cd ~./ssh ,然后就能找到对应密钥对,rsa.pub是公钥,把里面的内容copy到github->settings->ssh key中,这样就ok了(这样才能使用ssh方法clone项目)
以后每次git push origin master 就可以将本地master分支推送到远程master分支上
bug分支:当前在dev分支上开发了一半,接受了fix bug issue-1任务,可以先git stash隐藏工作区,这样git status就是干净的,然后git checkout master切换到主分支,再git checkout -b issue-1创建并切换到bug分支,然后修复了bug,切换到主分支,然后git merge issue-1,然后git branch -d issue-1即可,再切换回dev分支,git stash pop就可以恢复隐藏的工作区
多人协作一般流程:
- 首先,可以试图用git push origin <branch-name>推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin <branch-name>推送就能成功!
补充:
head是指向分支的,分支再指向commit,都是指针的形式
git log是最近到最远commit的日志记录。(即head,head^,head~2,head~3...的日志),可以加git log --pretty=oneline 这样可以只输入简要的日志信息。从远程仓库clone代码下来后,用git log就能看到所有之前的commit记录,如果用git reflog记录本地的所有对版本造成改变的命令操作等
git的版本号是sha-1计算出来的一个比较大的哈希
head表示当前所在版本,上一个版本为head^,再上一个版本为head^^(head~2)...
origin表示远程仓库
切换分支后工作区变改变到对应分支上(貌似是这样)
合并分支有个fast-forward快进模式,意思是只移动当前分支的指针,所以速度很快
git merge branchname 合并如果产生冲突,先git status查看哪里冲突,修改后 git commit即可
git还可以对某处commit打标签,git tag,具体使用方法可以参考https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000