git与svn的区别,简单的说,
svn在checkout后,如果不提交,那么版本库没有记录,如果修改的文件比较多,中间想回退几个文件,非常麻烦。git 是clone下来代码和记录,不提交到服务器时,可以本地多次commit,能做到部分回退,最后push到服务器,push的除了代码变更,还没有每一次的提交记录。
另外,git对一些场景比较适用,比如新需求正在开发,突然发现线上有bug,svn随着不断提交,代码已经与生产环境有差异,最好的办法是取某个时间的版本进行修改,再一点点合并进去。而git,线上与开发可以是不同分支,可以优先改线上代码,完成debug后,将线上分支merge到开发分支,就可以了。
1.clone代码
命令 git clone -b dev https://github.com/xuezhankui/SpringbootExample
黄色部分为clone dev分支,不加的话,clone下来master分支,修改分支可以通过git branch命令来改
2.git branch命令
首先,查询本地分支和远程分支都有哪些
git branch -a
黄色部分代表远程分支,没有参数显示本地分支。
其次,改变push的分支
因为是从master clone到本地master,所以master分支的push,必将上传到线上master分支,现在改一下。
情况1:如果线上有dev分支,想clone这个,但是是以masterclone下来的,
这时候只需要
git checkout -b dev origin/dev 作用是checkout远程的dev分支,在本地起名为dev分支,并切换到本地的dev分支
情况2:
使用本地dev分支,push的时候指定master分支。
虽然不建议这么做,至少给个方法
1.此做法与合并时有点像
git checkout dev 切换到dev分支
git branch --set-upstream-to=origin/master 设置push的目标
git push
2.一步搞定
git push origin master
最后,删除分支
git branch -d 要删除的分支
3.提交代码
这个简单,就简单说了
1。用git status命令,可以查看到都改了哪些文件
2.git add
两种方式,第一种,git add 路径/文件名
第二种,git add * //添加所有变更文件
3. git commit
git commit -m “注释信息”
4.合并以及冲突合并
场景:在dev_feature_xx分支改完了,需要合并进dev
方法一:
git checkout dev 切换到dev
git merge dev_feature_xx
可能会产生冲突,冲突的文件可以用git status找到
commit前也可以用 git diff dev_feature_xx dev 对比一下
合并完冲突文件
git add 冲突文件
git commit -m 'merge'
如果不确定dev对应哪个remote分支,可以执行一下
git branch --set-upstream-to=origin/dev 设置push的目的地
git push
或者
git push origin/dev
方法2:
git checkout dev
git pull origin dev_feature_xx
修改冲突文件
git add 冲突文件
git commit -m 'merge'
git push origin/dev
5 rollback
首先了解两个命令
git reflog 版本变化的记录,包含回退操作
git log 每次提交的记录,包含了注释,和commit id
方式一:
id方式 git reset <id> <文件名>
文件名不写的话,恢复所有文件
方式二:
HEAD方式,当前版本是HEAD
比如你修改了文件,后悔修改了,可以
git reset HEAD <文件名>
如果想恢复到上一个版本
git reset HEAD^
再上一个版本HEAD^^,以此类推
6.其他操作
git rm <文件名> 删除,这里指从git库删除。
相当于 rm <文件名> git add <文件名>
删除后要commit。
删除文件后的恢复:以a.txt为例
1.未commit到git库的文件,删除后就没有了
2.删除操作在执行commit之前,可以 git reset HEAD a.txt,将文件恢复到缓冲区,然后,git checkout a.txt找回。
3.删除操作已经提交,可以 git reset HEAD^ a.txt,将文件恢复到缓冲区,然后,git checkout a.txt找回。