美文网首页
Git 使用

Git 使用

作者: 我爱大灰狼 | 来源:发表于2018-08-07 16:32 被阅读0次

     Git操作

    一、创建git仓库

    git init --bare fasloan.git

    授权限

    chown -R git:git fasloan.git     

    远程库克隆

    git clone git@X.X.X.X:/home/yd_fasloan/fasloan.git

    二、创建与合并分支

    (分支管理:你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。其他版本控制系统如SVN等都有分支管理,但是用过之后你会发现,这些版本控制系统创建和切换分支比蜗牛还慢,简直让人无法忍受,结果分支功能成了摆设,大家都不去用。但Git的分支是与众不同的,无论创建、切换和删除分支,Git在1秒钟之内就能完成!无论你的版本库是1个文件还是1万个文件。)

    1.创建dev分支,然后切换到dev分支:

    $ git checkout -b dev

    创建分支并切换

    git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:

    $ git branch dev

    $ git checkout dev

    Switchedto branch'dev'

    2. 用git branch命令查看当前分支:

    $ git branch                   

    * dev               

    master

    git branch命令会列出所有分支,当前分支前面会标一个*号。

    查看当前分支

    在dev分支上正常提交,比如对fasloan_view.py 做个修改,删除一行:print111然后提交:

    3. 先查看当前状态:

    当前状态

    表示修改了fasloan_view.py的文件内容,现在提交一下将文件加入暂存区:

    添加暂存区

    对刚提交的文件进行描述,实际上是把暂存区的所有内容提交到当前分支:

    描述修改

    简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。查看现在的状态,该工作区是干净的没有任务去提交:

    当前状态

    现在,dev分支的工作完成,我们就可以切换回master分支:

    切换分支

    查看fasloan_view.py文件,发现刚才删除那行仍然存在:

    1.查看fasloan_view.py文件

    查看文件内容

    2.内容未修改:

    未改动内容

    解决办法:

    因为那个提交实在dev分支上,而master分支此刻提交点并没有变。我们把dev分支上的工作修改合并到master分支上:

    合并分支

    git merge命令用于合并指定分支到当前分支。合并后,再查看fasloan_view.py的内容,就可以看到,和dev分支的最新提交是完全一样的。

    修改文件内容

    现在将所有改动都合并到主分支了,用git log看看分支历史:

    查看分支历史

    在实际开发中,我们应该按照几个基本原则进行分支管理:

    (首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;

    那在哪干活呢?干活都在dev 分支上,也就是说,dev 分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。)

    合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。

     因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。

    $ git merge --no-ff  -m "merge with no-ff " dev

    $ git log--graph --pretty=oneline --abbrev-commit

    三、查看远程库的信息用git remote::

    远程库信息

    或者,用git remote -v显示更详细的信息:

    远程库信息

    上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

    四、推送分支

    1.推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

    推送分支

    并不是一定要把本地分支往远程推送

    master分支是主分支,因此要时刻与远程同步;

    dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;

    2. 多人协作工作模式:

    (1)使用git push origin  <分支名> 推送自己的修改

    (2)如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并

    (3)]如果和并有冲突,则解决冲突,并在本地提交

    (4)没有冲突或者解决掉冲突后,再用git push origin <分支名>就能推送成功

    如果git pull提示no tracking information, 则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <分支名> origin/<分支名>

    五、解决冲突:

    新分支开发feature1:

    创建新分支

    修改fasloan_view.py,添加了一行print(11)

    添加一行内容

    提交:

    提交到当前分支

    在master分支上把fasloan_view.py文件修改添加print(1111), 文件已被修改:

    添加一行

    添加文件到暂存区并提交:

    添加到当前分支

    这种情况git无法执行快速合并,只能试图把各自的修改合并起来,但这种合并可能会有冲突:

    合并分支

    Git告诉我们,fasloan_view.py文件存在冲突,必须手动解决冲突后再提交。git status也可以告诉我们冲突的文件:

    冲突文件内容

    修改内容之后保存,再提交:

    修改提交文件

    删除feature1分支:

    删除分支

    最后推到远程:

    同步到远程库

    六、版本回退

    Git每当文件修改到一定程度的时候,就可以“保存”一个快照,这个快照在Git里被称为commit,一旦把文件改乱了,或者误删了文件,还可以从最近的一个commit恢复,继续工作。

    git log命令显示从最近到最远的提交日志,如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

    提交日志

    看到一大串类似7feo2的是commit id(版本号), 一个通过SHA1计算出来的非常大的数字,用十六进制表示。

    回到上个版本,首先Git要知道当前版本是哪个,在Git中,用HEAD表示当前版本,也就是最新。上个版本HEAD^,上上个版本时HEAD^^, 当然网上100个版本,写成HEAD~100.

    回退上一个版本:

    回退版本

    已被还原:

    还原版本

    若想再回去,只要命令行窗口还没有被关掉,可以顺着找commit id,于是就可以回到未来的某个版本,版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了:

    回到指定版本

    你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本,Git提供了一个命令git reflog用来记录你的每一次命令:

    查看记录

    又找回了你想回到指定版本的commit id。

    七、撤销修改:

    git checkout -- file可以丢弃工作区的修改:把文件在工作区的修改全部撤销有两种情况:

    (1)文件自修改后还没有被放到暂存区,现在撤销修改就回到和版本库一模一样的状态。

    (2)文件已经添加到暂存区,又做了修改,现在撤销修改就回到添加到暂存区后的状态。总之,就是让文件回到最近一次git commit或者git add时的状态。

    修改文件并添加到了暂存区,庆幸的是在commit之前,用git status查看,修改到了暂存区,还没有提交;

    用命令git reset HEAD fasloan_view.py可以把暂存区的修改撤销掉,重新放回工作区。假设不但改错东西,还从暂存区提交到了版本库,就只能回到上一个版本(条件是还没把本地版本库推送到远程)

    总结:

    (1)当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file。

    (2)当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了场景1,第二步按场景1操作。

    (3)已经提交了不合适的修改到版本库时,想要撤销本次提交,只能回退版本,不过前提是没有推送到远程库。

    相关文章

      网友评论

          本文标题:Git 使用

          本文链接:https://www.haomeiwen.com/subject/hkdavftx.html