您现在的位置:首页 » 知识库 » 软件开发 软件开发
Git进阶使用笔记
发布日期:2018-04-17

内容导读

一直以来,Git的使用只停留在简单的操作上。但是这种方式Git会尽可能的使用 Fast forward 模式,这种情况下,删除分支后,分支信息会一并删除。tag标签即为给 commit 操作产生的id值取的别名。添加后,远程仓库的名字就叫做origin, Git的默认叫法,也可以更改。/home/git/.ssh/authorized_keys 一行一个用户,如果没有该文件,手动创建即可。当前用户的配置文件在home目录的 .gitconfig ,可以直接修改文件。

一直以来,Git的使用只停留在简单的操作上。要得心应手的使用Git,必须了解点其他的东西。

配置个人信息

$ git config --global user.name "xxyangyoulin"$ git config --global user.email "xxyangyoulin@gmail.com"

查看提交日志

git log
git log --pretty=oneline #简略查看信息
git log --graph --pretty=oneline --abbrev-commit #查看分支信息

文件差别对比

git diff file
  1. git diff filepath

    工作区与暂存区比较

  2. git diff HEAD filepath

    工作区与HEAD ( 当前工作分支) 比较

  3. git diff --staged 或 --cached filepath

    暂存区与HEAD比较

  4. git diff branchName filepath

    当前分支的文件与branchName 分支的文件进行比较

  5. git diff commitId filepath

    与某一次提交进行比较

进行版本穿梭

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上写成HEAD~100

回上一版

git reset --hard HEAD^

此时git log 发现当前版本以后的版本消失。

想回到未来版本?未关闭窗口之前,找到版本号:

git reset --hard <版本号>

版本的跳转,HEAD如同一个指针,跳转不过是指针指向不同的版本。

HEAD指向哪个版本,当前版本定位就在哪儿。

但是找不到版本号了?

git提供了查看你的每一次命令的命令:

git reflog

撤销修改

git checkout -- changedFile

将会回到文件最后一次commit或者add时候的状态。

已经被你add了?

撤销add

git reset HEAD file

这样add的文件就被撤销回到工作区了。

删除文件

  1. 工作区删除了文件并且确定也要删除版本库的该文件:

git rm hello.txtgit commit -m 'rm hello'
  1. 删错了?

git checkout -- hello.txt

恢复到最新版本。

进行分支管理

创建新的分支

git branch newbranch

切换到新分支

git checkout newbranch

创建并且切换

git checkout -b newbranch

查看当前分支

git branch

合并指定分支

git merge otherbranch

合并发生冲突,手动修改冲突文件并提交即可。

但是这种方式Git会尽可能的使用Fast forward模式,这种情况下,删除分支后,分支信息会一并删除。

禁用Fast forward模式?

git merge --no-ff otherbranch

--no-ff可以保留之前的分支历史,能够更好的查看历史分支信息。而git merge只保留单条分支记录。

gitmergenoff.png

删除指定分支

git branch -d otherbranch

推荐的是:创建一个分支完成一个任务,完成任务合并分支后删除完成任务的分支。

但是提示没有合并分支?

git branch -D otherbranch

强制删除。

储藏工作现场

工作途中,我们在A分支工作,当前任务未完成,没有添加到暂存区,但是需要紧急修复bug,使用:

git stash

储存现场,然后切换到需要修复bug的分支B。

接着,创建修复bug的分支C,完成修复任务,回到B分支,合并C分支,删除C分支。

然后,回到我们正在工作的A分支:

git checkout A

查看我们的工作现场:

git stash list

恢复工作现场?

git stash pop

此时会恢复并且删除stash的内容。

不删除stash内容?

git stash apply <指定stash,可以多次stash>

只执行恢复操作。

但是以后想删除?

git stash drop

执行删除stash内容的操作。

查看远程分支

git remote
git remote -v

将会显示更为详细的信息。

分支多人协作

其他人从服务器clone你的项目的时候,他默认只能在本地看到master分支,但是想切换其他分支进行工作?

git checkout -b work1 orgin/work1

在本地创建和远程对应的分支。

完成工作之后推送到服务器:

git push origin work1

此时其他人想要推送到work1就必须:

git pull

先拉取一下。

如果提示There is no tracking information for the current branch.

此时需要指定本地work1和远程work1分支的连接关系:

git branch --set-upstream work1 origin/work1

然后再执行拉取操作。

拉取之后,可能会发生冲突,手动解决即可。

tag标签的使用

tag标签即为给commit操作产生的id值取的别名。

git tag <-s> v1.0 <-m "tag explain"> <commit id>

commit id 为空将会对应最新的commit

-s秘钥签名标签。

-m标签说明。

查看标签信息:

git taggit show v1.0

删除标签:

git tag -d v1.0

推送标签:

git push origin v1.0

推送全部:

git push origin --tags

删除推送了的标签:

git tag -d v1.0git push origin :refs/tags/v1.0

忽略文件

强制添加存在.gitignore的文件

git add -f file.class

使用远程仓库

关联远程仓库

git remote add origin git@github.com:mnnyang/reponame.git

添加后,远程仓库的名字就叫做origin, Git的默认叫法,也可以更改。

关联之后,把本地的master分支所有内容推动到远程库上:

git push -u origin master

-u参数:

Git会把本地的master分支和远程的master分支关联起来,以后的推送和拉取就可以简化命令。

搭建Git远程服务器

  1. 首先肯定是要安装了Git才行啊。

  2. 创建一个专门用于运行git服务的用户:

    sudo adduser git
  3. 把需要登录的用户的id_rea.pub添加到

    /home/git/.ssh/authorized_keys 一行一个用户,如果没有该文件,手动创建即可。

  4. 选择一个目录作为仓库,在该目录下:

    sudo git init --bare sample.git

  5. 把仓库拥有者改为git用户:

    sudo chown -R git:git sample.git
  6. 禁止shell登录,修改/etc/passwd

    git:......:/home/git:/usr/bin/git-shell
  7. 本地克隆使用了:

    git clone git@serverip:/srv/sample.git

GitHub

生成key

ssh-keygen -t rsa

测试连接

ssh -T git@github.com

删除已关联的远程库

git remote rm origin

可以关联多个远程库

修改默认的远程库名称origin即可。

自定义配置

命令别名

git config --global alias.st statusgit config --global alias.cm commitgit config --global alias.br branchgit config --global alias.ma 'push origin master'git config --global alias.unstage 'reset HEAD'git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

--global是针对当前用户起作用。不加则只针对当前工作目录。

配置文件在.git/config文件中。当前用户的配置文件在home目录的.gitconfig,可以直接修改文件。

  • 去官方网站学习更多:

     

git-scm

  • 1.公司登记注册于2003年1月27日,清远市桑达电子网络媒体有限公司
    2.公司2006年起成为清远市政府定点协议供货商,电子采购供货商
    3.公司2007年被清远市相关政府部门评为安防行业状元
    4.公司2007年起成为长城电脑清远如意服务站(SP368)
    5.公司2007年承建清远市横河路口电子警察工程,开创清远电子警察先河。
  • 6.公司2007年起成为IBM合作伙伴、公司2010年底成为金蝶软件清远金牌代理(伙伴编号:30030013)
    7.公司组团队参加南方都市报组织的创富评选,获广东80强。公司申请多项软件著作权、专利权
    8.2016年起公司成为粤东西北地区为数不多的双软企业,确立“让软件驱动世界,让智能改变生活!"企业理想
    9.2016-01-29更名为广东互动电子网络媒体有限公司
    10.2021-01-13更名为广东互动电子有限公司
  • 投资合作咨询热线电话:0763-3391888 3323588
  • 做一个负责任的百年企业! 天行健,君子以自强不息;地势坤,君子以厚德载物;
    为用户创造价值! 让软件驱动世界; 让智能改变生活; 超越顾客期望,帮助顾客成功;
    对客户负责,对员工负责,对企业命运负责!帮助支持公司的客户成功;帮助忠诚于公司的员工成功!
  • 联系电话:0763-3391888 3323588 3318977
    服务热线:18023314222 QQ:529623964
  • 工作QQ:2501204690 商务QQ: 602045550
    投资及业务投诉QQ: 529623964
    微信:小米哥 微信号:qysed3391888
    腾讯微博:桑达网络-基石与起点
  • E-MAIL:222#QYSED.CN ok3391888#163.com (请用@替换#)
在线客服
  • 系统集成咨询
    点击这里给我发消息
  • 网站\微信\软件咨询
    点击这里给我发消息
  • 售后服务
    点击这里给我发消息
  • 投资合作
    点击这里给我发消息