Skip to content

git在实际开发中的应用场景 #32

@willson-wang

Description

@willson-wang

git总结

开始一个新项目,我们需要使用git来管理我们的代码,于是总结了下,常用的一些场景;

怎样开始一个新项目

  1. git clone 项目链接 克隆下来之后实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

  2. 所以此时使用git remote查看远程分支显示结果为origin or 使用git remote -v显示更详细的信息,结果会显示抓取(fetch)与推送(push)的origin地址,如果没有推送权限是看不到push地址的

  3. 此时就看怎么开发了,如果已经远程建了分支,那么只需要git branch查看本地分支,git branch -a 查看远程分支;然后使用git checkout 远程分支名(等价于git checkout -b branch-name origin/branch-name)在本地创建和远程分支对应的分支
    建立本地分支与远程某分支的关联git branch --set-upstream branch-name origin/branch-name

  4. 开发完成之后git add / git commit -m 之后,先更新下远程分支git pull origin 远程分支名(注意,这里简写了,原因是本地分支与远程分支名称一致);git push origin 远程分支名
    git push origin master 将本地的master分支推送到远程仓库(主分支)

  5. 一个常规的开发,上传流程就结束了

怎么去关联某个本地仓库与远程仓库,便于使用简写命令

使用git branch --set-upstream-to命令

git branch --set-upstream-to=origin/master master 将远程master分支与本地master分支关联起来,方便在master分支上直接使用命令,git pull or git push 而不是使用git pull origin master or git push origin master
git branch --set-upstream-to=origin/dev dev 同master分支是一样的

创建本地分支or远程分支

git checkout -b dev 创建本地dev分支
git push origin dev:dev 创建远程dev分支并与本地dev分支关联起来

git checkout -b dev origin/dev // 创建远程分支
git push origin dev // push到远程成的

如果远程仓库没有dev分支 git push origin dev:dev 创建远程dev分支,并与本地dev分支关联起来,注意如果没有远程dev分支,直接add、commit之后,执行push命令即可,push命令也可以在该本地分支
创建之后执行也是一样的

如果有远程dev分支,直接使用git checkout dev === git checkout dev origin/dev即可创建本地分支dev,并且和远程origin/dev分支关联,本地dev分支的初始代码和远程的dev分支代码一样

删除本地or远程分支

删除远程dev分支 git push origin :dev
删除远程dev分支 git push origin --delete dev
删除本都dev分支 git branch -d dev

pull命令与push命令

git pull <远程主机> <远程分支>:<本地分支>
git pull origin master:my_test origin仓库的master分支拉取并合并到本地的my_test分支上
git pull origin master 如果省略本地分支,则将自动合并到当前所在分支上

这里有一点需要注意的是在一个a分支上执行git pull origin b分支,是会把远程b分支的代码直接合并到本地a分支上来的;所以git pull的是会一定要注意pull的远程分支

git push <远程主机名> <本地分支名>:<远程分支名>命令中的本地分支是指将要被推送到远端的分支,而远程分支是指推送的目标分支,即将本地分支合并到远程分支。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),
如果该远程分支不存在,则会被新建;
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,这条命令是删除远程master分支git push origin :master ===> git push origin --delete master
如果当前分支与远程分支之间存在追踪关系(即分支名相同),则本地分支和远程分支都可以省略。git push origin 将当前分支推送到origin主机的对应分支

创建分支开发方式

  1. 只创建本地分支,然后合并master开发
git checkout -b dev

修改文件

git add .

git commit -m 'xx'

git checkout master

git merge dev

git pull 

git push 整个流程就结束了,然后继续切换到dev分支上继续开发,继续上述的步骤
  1. 创建本地与对应的远程分支,然后合并master开发
如果远程仓库没有dev分支
git checkout -b dev

git push origin dev:dev  //创建远程dev分支

修改文件

git add .

git commit -m 'xx'

//这里有两种情况,推荐使用第一种方式
第一种,现在本地切换到本地master分支,合并之后再push
git checkout master

git merge dev

git pull

git push //整个流程结束,然后切换到dev分支,pull与push一下dev分支,然后继续开发

第二种是直接再dev分支上push,然后在github or gitlab上根据提示合并代码
git pull

git push

git checkout master

git pull


如果远程仓库有dev分支
git checkout dev

修改内容

git add .

git commit -m 'xx'

合并的方式同上

解决冲突的方法

解决test上分支的冲突

  1. 进入到有冲突的那个项目内

  2. git pull 拉取最新代码,注意是test分支

  3. git checkout 到修改提交代码的分支,然后git pull

  4. git checkout test分支,然后git merge 刚刚提交代码有冲突的分支,然后会提示有代码冲突

  5. 打开有冲突的文件,然后手动解决冲突

  6. 解决完成之后,点击resolve,然后点击ok

  7. git push 就在test分支上,然后git status查看下,整个过程冲突就算解决了

解决release分支上的冲突

  1. 在本地电脑上进入到有冲突的那个项目内

  2. 进入到对应的开发分支,然后把本地最新的master分支合到开发分支

  3. 然后提交代码,让测试重新build

上面这些操作步骤是可以简化的,我们不需要去checkout到开发的分支并且把代码拉下来;直接进入到test or release分支之后,直接git merge origin/branch_name 直接去merge远程分支即可,然后解决冲突在重新上传test or release分支

本地包的修改如@angular_xx

  1. npm login --registry=https://xxx.cn/repository/xxx/ --scope=@xxx登录,输入用户名与密码还有邮箱,云客的用户名是xxx 密码是xxx

  2. 在本地包目录如angular_xx目录内执行yarn link构建软链接,然后在使用仓库的目录内执行yarn link 目标仓库名称 如yarn link @xxxke/angular-xx,这个时候在使用仓库的目录内直接修改
    就会直接在本地包目录来也同步完成修改

  3. 调式完成之后,在本地包内,记录下change.log及在package.json内改下version +1,然后git add / git commit / git pull / git push / yarn publish发布 注意本地包开发都是在master分支

  4. 然后在使用仓库的目录更改package.json文件内,刚刚发布包的最新版本号,然后在yarn-lock文件内也找到对应的包,并更改版本号,然后执行yarn or yarn install 则可以重新yarn start了

  5. 注意直接在node_modules内改本地包,改完需要yarn start重启一次,才会生效

怎么查看gitlab服务器的地址

查看gitlab服务器的服务器地址,就是打开一个项目,然后查看它的ssh链接,前面那部分就是地址,然后可以通过ssh -T 服务器地址来判断当前电脑是否关联了gitlab
git@git.mysoft.com.cn:xxx/p_xxx_back.git 使用ssh -T git@git.mysoft.com.cn
ssh -T git@github.com 查看是否关联github成功

查看某个文件的修改历史

第一种方式

  1. 切换到目录 即cd 到需要查看修改记录的文件夹
  2. git log --pretty=oneline 文件名
  3. git show commit_id 则可查看具体的某一次提交修改内容

第二种方式
git log -p src/preview-kit/linux-2.6.34/drivers/usb/gadget/mv_gadget.js 显示关于这个文件所提交的commit,同时把修改的内容也显示出来

冻结当前分支上的所以改动

当我们需要紧急去其它分支处理问题时,需要把当前分支上已经修改的内容进行冻结,方便切换到其它分支进行开发

git stash

git stash pop 解除冻结

这里需要注意的一点是,当我在当前分支git stash之后,切换到其它分支,当其它分支有冲突,并解决了冲突提交之后,在回到之前开发的分支,并使用git stash pop之后,会报错,这时候的解决方法是,使用git status查看是否有修改or新增的文件,如果有push完之后,就可以继续git stash pop

查看项目git配置项

git config --list 查看项目git配置项

// 配置全局用户名与邮箱
git config global user.name 'xxx'
git config global user.email 'xxx'

// 配置当前项目用户名与邮箱
git config user.name 'xxx'
git config user.email 'xxx'

撤销本地merge操作

git merge --abort

使用cherry-pick将a分支上的某个commit合并到b分支上来

1 现在a分支上查看需要合并的commit_id
2 git checkout b
3 git cherry-pick commit_id

如果没有冲突,直接git push origin a ,如果有冲突,解决完冲突之后在git add . git commit -m 'xxx' git push ;
如果不想要这一次的合并来,直接执行git cherry-pick --abort

撤销本次提交,即撤销本次git commit的内容

直接丢弃本次的commit内容
git reset --hard HEAD^

直接将本次的commit的内容还原到暂存区
git reset --soft HEAD^

git tag

添加附注标签
git tag -a v0.1 -m 'xxxx' 在当前分支最新的commit_id上创建标签
git push origin v0.1

添加简单标签
git tag v0.1
git push origin v0.1

两者的区别是git show v0.1查看tag信息的时候,附注标签是能过看到提交信息及注释,而简单标签是看不到的

针对某个commit_id打tag
git tag -a v0.1 -m 'xxxx' commit_id

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions