当前位置:   article > 正文

项目管理-git使用_git项目管理

git项目管理

1,简介

Git是目前世界上最先进的分布式版本控制系统(没有之一)。

1)Git操作区域

工作区

开发修改代码区域

暂存区

Git根目录下 > .git > index的文件中,保存了所有的代码提交记录。

add操作就是将记录保存到暂存区,此时Head依然指向之前的内容,通过commit将暂存区的内容全部提交,之后Head指向最新内容(通过gitk查看)。
Git管理的是修改内容,而不是文件

历史区

保存各个版本区域。

2,集中式和分布式

CVS及SVN都是集中式版本控制系统,Git是分布式版本控制系统。
集中式必须联网才能工作。如果中央服务器出问题,所有人都受影响。
分布式可以不在一个网络工作,它的中央服务器仅受用来方便交换大家的修改。

1)git与svn区别

都可以管理代码版本。主要区别:

  1. git是分布式版本控制系统;svn是集中式版本控制系统。
  2. 版本号:git使用SHA-1散列值作为版本号;svn使用版本序号来标识每个提交。
  3. 分支管理:git擅长分支管理
  4. 内部实现:git通过”快照“存储版本信息,每次提交都会生成一个快照。svn通过”增量式差异“的方式存储版本信息,每个版本只存储与上一个版本的差异。
  5. 大小现在:git可以处理非常大的代码仓库,由于是分布式不需要集中式仓库的所有数据。而svn受到服务器和带宽限制,大数据量会出现性能问题。

3,使用

1)配置

命令功能备注
git config可以查看全部配置命令
git config --list查看git的配置列表如果没有配置东西,应该是空的

①配置用户名密码

git config --global user.name "username"
git config --global user.email "username@email.com"
  • 1
  • 2

–global 表示全局的,即当前用户都有效,该配置会出现在 ~/.gitconfig 文件中,~表示当前用户的目录。
不加 --global 表示局部的,只对当前仓库起效的,它的配置信息会在当前仓库根目录/.git/config文件下。
局部配置会覆盖全局配置。

②修改配置

    git config --replace-all user.name "name"
    git config --replace-all user.email "123@qq.com"
  • 1
  • 2

③fatal: Authentication failed

问题原因是修改了git密码。
本地git凭据修改:进入控制面板》用户账号》凭据管理器》windows凭据》普通凭据,找到git,点开编辑密码,更新为最新密码

2)仓库

命令功能备注
git init本地创建仓库在一个文件目录执行该指令,会把该目录快速设置成Git的代码仓库
ls -ah显示隐藏的.git目录:用来跟踪版本
git clone https://git-biz.url.git从远程拉取仓库从远程服务器clone工程,也会创建一个代码仓库
ssh-keygen -t rsa -C “yourname@example.com”本地仓库和远程仓库通信需要SSH进行身份认证,创建SSH私钥和公钥。id_rsa私钥用于验证自己身份。id_rsa.pub公钥用于向服务器表明自己的身份。
git remote add本地代码库提交到远程
git remote set-url origin http:xxx.git更换远程仓库地址,URL为新地址。
git remote -v查看远程仓库的地址

3)提交修改

1>检查git当前同步状态

命令功能备注
git status查看当前仓库状态会提示那些文件发生修改,哪些内容需要add&commit。
git status -s以精简的方式显示文件状态
git status --short以精简的方式显示文件状态

状态详解:

状态说明
A你本地新增的文件(服务器上没有)
C文件的一个新拷贝
D你本地删除的文件(服务器上还在)
M文件的内容或者mode被修改了
R文件名被修改了
T文件的类型被修改了
U文件没有被合并(你需要完成合并才能进行提交)
X未知状态(很可能是遇到git的bug了,你可以向git提交bug report)
未被git进行管理,可以使用git add file1把file1添加进git能被git所进行管理

2>文件操作

分类命令功能备注
addgit add [file1] [file2] …添加文件到仓库把文件添加到缓冲区
addgit add [dir]添加指定目录到暂存区,包括子目录
addgit add .添加所有文件到缓冲区不可以添加被手动删除的文件
addgit add --all添加所有文件到缓冲区可以添加被手动删除的文件
addgit add -p对于同一个文件的多处变化,可以实现分次提交
addgit add -u表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件,注意这些被删除的文件被加入到暂存区再被提交并推送到服务器的版本库之后这个文件就会从git系统中消失了
addgit add -A表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
checkoutgit checkout ReadMe.txt(文件名)将未add提交的修改内容全部还原如果执行add后修改的内容,执行该指令会修改到执行好add后
checkoutgit checkout – readme.txt能将add提交的内容都回退掉
resetgit reset HEAD ReadMe.txt(文件名)文件从暂存区回退到工作区
resetgit reset –hard HEAD~5回退5个版本hard参数:不仅仅是将本地版本库的头指针全部重置到指定版本,也会重置暂存区,并且会将工作区代码也回退到这个版本。也可以通过commit ID回退到对应版本。
rmgit rm ReadMe.txt(文件名)删除文件
commitgit commit -m 这是一个注释一次提交缓冲区的所有文件和注释提交缓冲区的所有修改到仓库。如果修改了文件但是没有add到缓冲区,也是不会被提交的。
commitgit commit –amend -m追加注释,会覆盖上次的注释如果上一个注释写错,可以这样进行修改和追加
commitgit commit readme.txt提交单个文件
$ . //要求输入注释
//在出来的新页面,输入 s,进入INSERT状态
//在#上面,输入注释
//按esc退出编辑状态
//输入“:wq”,重新进入命令状态。
//这个时候会提示有一个变更,需要重新commit
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
stash(文件暂存)

在main分支上开发功能的时候,开发到一半,发现了以前的BUG,这时新建一个BUG分支,在上面修复BUG。但是因为main分支开发的功能开发到一半,会导致BUG分支无法编译通过。这时候可以用git stash暂存当前的修改。在修改前的分支作为新的BUG分支。等解决BUG后切换回main分支的时候,再把暂存的内容Pop出来。 先checkout一个BUG分支,修改BUG后,用git merge合并到master分支,并且删除了BUG分支。这时候回到main分支,通过git stashpop出之前暂存的内容。

	git stash //暂存
    git stash list     // 查看当前暂存内容
    git stash apply/pop  //内容恢复,后者会删除记录,前者可以通过git stash drop删除暂存记录。
  • 1
  • 2
  • 3

3>查看日志

命令功能备注
git log查看日志
git log --author=liyong查看用户liyong的操作日志
git shortlog将开发者操作按照姓名分组
git reflog查看操作历史

4>比较不同

命令功能备注
git diff ReadMe.txt(文件名)显示指定内容的前后变化
git diff HEAD显示出上次提交节点的差别
git还支持第三方更强大的diff工具:Meld、beyond compare。图形化的log记录:gitk

4)分支

命令功能备注
git brach brachName创建分支
git branch -vv查看当前所有分支
git branch -r显示所有远程分支
git branch -a显示所有本地分支和远程分支*打头表示当前分支;红色表示远程分支。按Q退出
git fetch取回所有分支(branch)的更新如果看不到远程分支时执行
git fetch origin master取回特定分支的更新git fetch <远程主机名> <分支名>
git checkout -b newBrachName origin/master在origin/master的基础上,创建一个新分支首先保证在origin/master目录下
git push origin newBrachName将本地创建的分支,推送到远程仓库
git push -u origin master将本地master分支提交到远程的master分支,并关联起来
git merge service-v1.0将分支service-v1.0合并到当前分支
git pull origin service-v1.0将分支service-v1.0覆盖当前分支
git pull –rebase如果Apush修改前,B push了修改,A push的时候需要先从远程获取最新修改。这个指令不会产生过多的merge历史。
git checkout branchName切换分支然后通过$ git branch -a下载代码。
git checkout -b branchName创建并切换分支然后通过git status命令查看分支
git branch -d branchName删除分支-d是删除分支,-D是强行删除分支
git branch -m 原名 新重命名分支

修改分支名:

#本地分支重命名(还没有推送到远程)
git branch -m oldName newName

#远程分支重命名 (已经推送远程-假设本地分支和远程对应分支名称相同)
#a. 重命名远程分支对应的本地分支
git branch -m oldName newName
#b. 删除远程分支
git push --delete origin oldName
#c. 上传新命名的本地分支
git push origin newName
#把修改后的本地分支与远程分支关联
git branch --set-upstream-to origin/newName
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

5)Tag

Tag用于记录某个commit点或者分支的历史快照。Tag通常打在Master分支上,以保证代码的准确性。

命令功能备注
git tag tagName创建Tag,会记录在最后的提交上
git tag查看所有Tag
git tag -d tagName删除tag
git tag -a v1 -m “vesion1” b87123665216321635173-a制定tag名字,-m制定注释文字
git show tagName显示tag的详细信息
git push origin tagName推送tag到远程仓库
git push origin –tags推送所有本地tag到远程仓库
删除本地tag,再重新push到远程代码库删除远程Tag

6)代码提交、更新和撤回

命令功能备注
git pull origin luo-branchpull代码
git push origin luo-branchpush代码
git revert -m 1 HEAD撤回最新mr撤回后git push即可提交。注意:会保留mr记录

1>代码提交步骤:

  1. add所有文件
  2. git commit -m “这是一条注释”
  3. commit后想撤回,怎么处理?
    git reset --soft HEAD^ 撤回commit但保留代码;
    git commit --amend 修改注释;

2>代码合并撤回再重新合并代码丢失问题:

步骤:
4. 代码检出:git checkout master
5. 分支合并:git merge origin/feature
6. 发现有问题,合并撤回:git revert < commit id > -m 1
7. 修改问题后,重新merge 发现第一次merge的东西丢失了。(原因是revert也相当于一次提交,相当于删除了代码)
8. 解决办法:
方法一:idea本地history恢复。
方法二:

git checkout master
# 把master回滚merge之前的状态
git reset head^ --hard   
(git reset --head "<>")
# 强制推上去
git push -f
# 重新merge feature后再推远程即可
git merge feature
git push
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

方法三:(官方推荐)

git checkout master
# 从master拉一个新分支 revert_tmp
git checkout -b revert_tmp
 
# 找到 revert 的那条提交记录,注意了,revert 相关的会有两条记录,第一条是 revert,第二条是 revert 后 merge 的记录,这里取第一条
# 用revert_tmp分支revert之前的revert
git revert <版本号>
 
# 再用master分支合并此分支代码推到远程即可
git checkout master
git merge revert_tmp
git push
当然也可以直接在master 上revert 之前revert的分支即可(不用新拉分支), 但是注意解决好冲突
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

回滚操作中: git revert 和 git reset的区别:

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。
  3. 在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入。

3>reset和revert区别

两者都是撤回代码,不同在于:

  1. reset回退比较暴力,彻底回退到指定版本,reset操作也不会有git记录。使用–hard操作也会把这次提交之后的所有操作一并删除。
  2. revert(推荐),仅仅撤销指定提交,revert操作会有git记录,提交后也不影响其它提交。

7)webhook(网络钩子)

一般与jenkins联合使用,gitlab的某个项目的代码更新了后就触发 webhook中配置的 url ,这个url一般是某一个jienkins中某一个job的url。即gitlab代码更新后就会触发 jinkins的任务自动进行构建。
在这里插入图片描述
如下图,输入url和安全令牌(Secret token),勾选推送事件(Push events,此链接将在代码push或者merge时触发)
在这里插入图片描述
Url来源是jenkins源码管理 确定的,如下图。
在这里插入图片描述

8)rollback

IDEA可以通过rollback进行代码回退,如果一不小心回退了,通过local history可以恢复。
在这里插入图片描述

9)其它

统计代码数量:

git log --author='luo' --since=2019-09-06 --until=2020-01-15 --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }'
  • 1

4,git ssh key

  1. git clone支持https和git(即ssh)两种方式下载源码,其中ssh通过配置key可以免密使用git。

  2. git config --global --list 检查邮箱和用户名是否配置

  3. 生成授权证书:ssh-keygen -t rsa -C “邮箱”
    执行命令后需要进行3次或4次确认:

    确认秘钥的保存路径(如果不需要改路径则直接回车);
    如果上一步置顶的保存路径下已经有秘钥文件,则需要确认是否覆盖(如果之前的秘钥不再需要则直接回车覆盖,如需要则手动拷贝到其他目录后再覆盖);
    创建密码(如果不需要密码则直接回车);
    确认密码;
    查看公钥私钥是否在系统中生成:

cd ~/.ssh/
ls 
  • 1
  • 2
id_rsa:这个是私钥
id_rsa.pub:这个是公钥
  • 1
  • 2
  1. 打开你的github,进入配置页:(右上角,Settings)
  2. 选择SSH keys,输入公钥。(通过vim id_rsa.pub获取)

5,使用教程

6,git for mac

1)安装

官网下载

7,其它问题

1)fatal: Authentication failed

应该是改了git密码但是本地的密码凭据未更新的原因。
windows密码凭据:控制面板->用户控制->凭据管理;
mac密码凭据:应用程序->实用工具->钥匙串->gitlab.……(双击可以查看密码)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/905315
推荐阅读
相关标签
  

闽ICP备14008679号