删除远程仓库
# 查看远程仓库
git branch -a
master # 主分支
remotes/origin/master # 远程仓库origin下的master分支
remotes/origin_d/master # 远程仓库origin_d的master分支
remotes/origin_e/master # 远程仓库origin_e的master分支
# 执行删除仓库操作
git remote rm origin
git remote rm origin_e
给远程仓库创建新的分支
# 创建分支dev
git branch dev // 创建本地dev分支
# 切换到新分支dev
git checkout dev
# 以上两步可以合并成以下一行代码
git checkout -b dev
# 新建一个远程分支,名字一样
git push origin dev:dev
# 将本地分支和远程分支关联
git push --set-upstream origin dev
# 第一次提交代码使用push -u,后续提交不用加-u
git push -u origin dev
git push -u origin dev-group-order-keshoukucun-20240708
删除本地分支和远程分支
# 推送一个空的分支到远程仓库,相当于删除了远程分支branch-1
git push orgin:branch-1
# 删除本地分支dev
git branch -d dev
克隆分支到本地
# 拉取仓库代码
git clone http://10.7.200.31:8001/r/Web/WDDPlatform.git
# cd 项目文件
# 如果不执行这一步,你clone的别人的代码,上传到自己的GitHub上时,把别人之前commit的记录都会提交上去
# 如果这一步操作不成功 就删除.git文件夹重新走一遍这些步骤
git init
# 远程仓库origin有两个分支 master branch-1,将远程分branch-1支克隆到本地branch1分支中
git checkout -b branch1 origin/branch-1
# 拉取branc-1分支的代码
git pull
查看本地和远程对应分支
git branch -v
设置用户名和邮箱
也可以对某个项目单独设置用户名和邮箱
# 查看用户名
git config user.name
# 查看邮箱
git config user.email
# 设置用户名
git config --global user.name 'zongqiang'
首次连接远程仓库
git add --all
git commit -m ''
git remote add origin url # 远程仓库的url
git push -u origin master
从远程仓库拉取更新
# <远程主机名> <远程分支名>:<本地分支名>
git pull origin dev:dev
# 简写
git pull origin dev
提交最新代码到远程仓库
# <远程仓库名> <本地分支名>:<远程分支名>
git push origin master:master
git进入vim模式的处理
- 输入
i,进入insert模式,输入说明 - 输入完成,按下
esc,下方insert消失后,先按shif键,再按;键 - 在最下方的
:后,输入wq然后按下enter键,即可退出vim模式
拉取指定分支代码
# url为远程仓库地址
git clone -b dev url
# 例如:
git clone -b master https://gitee.com/zong__qiang/technical-manual.git
本地commit之后,远端仓库有别人提交过代码
在本地commit完了之后,远端仓库上有别人提交了代码,就会出现如下问题:
zongq@DESKTOP-V9GGS1L MINGW64 /f/code/vue/chongqingdaye/ChongqinProject (master)
$ git push origin master
To http://10.7.200.31:8001/r/Web/ChongqinProject.git
! [rejected] master -> master (non-fast-forward)
error: failed to push some refs to 'http://zongq@10.7.200.31:8001/r/Web/ChongqinProject.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
此时你再执行git pull origin master会出现两种情况:
(1)有冲突
终端显示如下:
zongq@DESKTOP-V9GGS1L MINGW64 /f/code/vue/chongqingdaye/ChongqinProject (master)
$ git pull origin master
From http://10.7.200.31:8001/r/Web/ChongqinProject
* branch master -> FETCH_HEAD
Auto-merging src/views/homepage/index.vue
CONFLICT (content): Merge conflict in src/views/homepage/index.vue
Auto-merging src/main.js
Auto-merging package.json
CONFLICT (content): Merge conflict in package.json
Automatic merge failed; fix conflicts and then commit the result.
上述错误提示,有两个地方需要我们手动合并:
CONFLICT (content): Merge conflict in src/views/homepage/index.vue
CONFLICT (content): Merge conflict in package.json
找到这两个文件,然后手动合并两个人写的代码,合并完之后,再执行git add --all git commit -m '' git push origin master
(2)没有冲突
终端显示如下:
zongq@DESKTOP-V9GGS1L MINGW64 /f/code/vue/chongqingdaye/ChongqinProject (master)
$ git push origin master
Counting objects: 19, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (19/19), 2.50 KiB | 319.00 KiB/s, done.
Total 19 (delta 10), reused 0 (delta 0)
remote: Resolving deltas: 100% (10/10)
remote: Updating references: 100% (1/1)
To http://10.7.200.31:8001/r/Web/ChongqinProject.git
1f17fdd..eb673e2 master -> master
强行合并某一分支代码
git push origin master --force
注意:不可强行合并,这样会覆盖到远端代码,导致丢失
删除掉默认分支
git branch -a
# 显示如下:
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
origin/HEAD是什么
它就像一个指针,表示默认指针,它指向origin/master,即origin/master是默认分支
git remote set-head origin -d
.gitignore文件介绍
* bin/: 忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 忽略根目录下的bin文件
/*.c: 忽略 cat.c,不忽略 build/cat.c
debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj
**/foo: 忽略/foo, a/foo, a/b/foo等
a/**/b: 忽略a/b, a/x/b, a/x/y/b等
!/bin/run.sh: 不忽略 bin 目录下的 run.sh 文件
*.log: 忽略所有 .log 文件
config.php: 忽略当前路径的 config.php 文件
# 表示此为注释,将被Git忽略
*.a 表示忽略所有 .a 结尾的文件
!lib.a 表示但lib.a除外
/TODO 表示仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ 表示忽略 build/目录下的所有文件,过滤整个build文件夹;
doc/*.txt 表示会忽略doc/notes.txt但不包括 doc/server/arch.txt
bin/: 表示忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略 bin 文件
/bin: 表示忽略根目录下的bin文件
/*.c: 表示忽略cat.c,不忽略 build/cat.c
debug/*.obj: 表示忽略debug/io.obj,不忽略 debug/common/io.obj和tools/debug/io.obj
**/foo: 表示忽略/foo,a/foo,a/b/foo等
a/**/b: 表示忽略a/b, a/x/b,a/x/y/b等
!/bin/run.sh 表示不忽略bin目录下的run.sh文件
*.log: 表示忽略所有 .log 文件
config.php: 表示忽略当前路径的 config.php 文件
/mtk/ 表示过滤整个文件夹
*.zip 表示过滤所有.zip文件
/mtk/do.c 表示过滤某个具体文件
被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地库中还有,只是push的时候不会上传。
需要注意的是,gitignore还可以指定要将哪些文件添加到版本管理中,如下:
!*.zip
!/mtk/one.txt
唯一的区别就是规则开头多了一个感叹号,Git会将满足这类规则的文件添加到版本管理中。为什么要有两种规则呢?
想象一个场景:假如我们只需要管理/mtk/目录中的one.txt文件,这个目录中的其他文件都不需要管理,那么.gitignore规则应写为::
/mtk/*
!/mtk/one.txt
假设我们只有过滤规则,而没有添加规则,那么我们就需要把/mtk/目录下除了one.txt以外的所有文件都写出来!
注意上面的/mtk/*不能写为/mtk/,否则父目录被前面的规则排除掉了,one.txt文件虽然加了!过滤规则,也不会生效!
fd1/*
说明:忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略;
/fd1/*
说明:忽略根目录下的 /fd1/ 目录的全部内容;
/*
!.gitignore
!/fw/
/fw/*
!/fw/bin/
!/fw/sf/
说明:忽略全部内容,但是不忽略 .gitignore 文件、根目录下的 /fw/bin/ 和 /fw/sf/ 目录;注意要先对bin/的父目录使用!规则,使其不被排除。
.gitignore不生效如何解决?
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的,解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
git push origin master
解决代码冲突
先把自己的代码提交了,然后git pull 拉取代码,有些会自动合并,有冲突的需要手动解决,然后再次提交代码,并通知其它成员更新合并后的代码


git add --all
git commit -m
git push origin master
git pull orign master
git add --all
git commit -m
git push origin master
合并分支代码到master上
例如,我需要将dev分支上的代码合并到maser分支上,首先需要切换分支到dev上
# 切换分支
git checkout <分支名>
# 例如:
git checkout dev
使用git pull将dev分支代码pull下来,确保dev分支上的代码是最新的
git pull
然后切换到主分支master上
git checkout master
然后执行如下命令,把dev分支上的代码merge到主分支master上
# 合并代码
git merge <分支名>
# 例如:
git merge dev
合并之后,可能会有冲突,有些会自动合并,但是有些需要挨个看代码手动解决代码冲突,然后执行如下命令重新提交代码到master分支上。
git add --all
git commit -m 'Description:合并dev分支的代码到master分支上'
git push origin master