切换账号:
git config user.name // 查看当前设置的用户名
git config user.email // 查看当前设置的邮箱
git config --global user.name “your_new_username” // 设置新的用户名
git config --global user.email “your_new_email” // 设置新的邮箱
其中,`–global`选项表示修改全局配置,如果不加该选项,则只会修改当前项目的配置。
一、git工作常用命令:
1、拉取远程仓库:git clone 仓库地址
2、创建分支并切换 :git checkout -b 分支名 (需要在哪个分支上创建自己分支,需要先切换到当前分支,然后在git checkout -b 自己分支,如要在dev分支创建自己分支,先git checkout dev, 然后在git checkout -b 自己分支)
3、创建远程分支并推送代码:git push origin 要推送的分支名(即当前自己的分支名)
4、删除分支: git branch -d 要删除的分支名 ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
5、本地合并分支: git merge 要合并到的分支名 ----将需要合并的分支与当前分支合并。合并远程分支:git merge origin/要合并的远程分支名
6、拉取对应远程分支的最新代码到本地对应分支:git pull (先git checkout 本地分支,然后在 git pull , 就能拉取最新代码了)
7、查看本地所有分支:git branch
8、查看本地修改:git status
9、git reset HEAD 加上本地暂存的,就是删除本地暂存的数据
10、git log 查看所有提交的暂存的记录, commit 后面一串字符就是暂存的记录(类似id)
11、git reset HEAD~ 撤回刚本地保存还没有push到远程的 数据
12、git reset --hard 加上commit 后面一串字符就是暂存的记录(类似id) 就是恢复到之前做的提交记录中 git reset --soft HEAD~1 本地回滚到上个版本 git reset --hard HEAD@{1} 撤销最近的一次回滚
13、git push -f 恢复之前数据后 提交到远程
14、git config core.ignorecase false 配置git识别文件大小写变更
15、git切换到别的分支,暂时保存当前分支的修改(不进行add 和commit)的方法 先保存代码的变更 git add .
(1)简单的做法
- 第一步把修改的代码储藏起来 git stash
- 第二步将git stash栈中最后一个版本取出来 git stash pop
(2)复杂的做法 可以在储藏的时候添加储藏信息,然后选择性的把某个版本取出来
第一步: git stash save “修改的信息"
第二步: git stash list //查看所有储藏的版本
- git stash pop stash@{0} //选择栈中的第0
- 如果出现 “(END)” 无法操作,可按 q 退出即可
在栈中取出指定版本有两种做法 git stash pop stash@{id} 和 git stash apply stash@{id}
区别是: git stash pop stash@{id}命令会在执行后将对应的stash id 从stash list里删除,而 git stash apply stash@{id} 命令则会继续保存stash id。
(3)删除版本
-
git stash clear //删除所有的版本
-
git stash drop //默认删除队列中的第一个版本
-
git stash drop stash@{0} //指定删除队列中
二、如何解决合并冲突:
当自己建的分支 与 要合并的远程分支发生合并冲突时,在vscode执行下面操作
1、当本地没有要合并的远程分支时,拉取远程分支到本地, 然后git checkout 到自己的分支,用 git merge 要合并的远程分支,会提示冲突的文件夹
2、本地有要合并的远程分支时,,先git checkout 到要合并的分支,再用 git pull 拉取最新的数据,然后在git checkout 到自己的分支,然后用 git merge 要合并
的远程分支,会提示冲突的文件夹
3、然后在冲突的文件夹中 解决好冲突,重新暂存提交到 自己的远程分支即可
4、冲突提示命令git merge --no-commit --no-ff 自己分支:
如:git merge --no-commit --no-ff develop
--no-commit :这就像普通的合并,但不会创建合并提交。
此提交将是合并提交:当您查看历史记录时,您的提交将显示为常规合并。
--no-ff :--no-ff指的是强行关闭fast-forward方式。 fast-forward方式就是当条件允许的时候,git直接把HEAD指针指向合并分支的头,完成合并。属于“快进方式”,不过这种情况如果删除分支,则会丢失分支信息。因为在这个过程中没有创建commit git merge --squash 是用来把一些不必要commit进行压缩,比如说,你的feature在开发的时候写的commit很乱,那么我们合并的时候不希望把这些历史commit带过来,于是使用--squash进行合并,此时文件已经同合并后一样了,但不移动HEAD,不提交。需要进行一次额外的commit来“总结”一下,然后完成最终的合并。 总结:--no-ff:不使用fast-forward方式合并,保留分支的commit历史--squash:使用squash方式合并,把多次分支commit历史压缩为一次
5、取消当前合并,恢复未合并状态 git merge --abort
三、如何拉取最新的分支:
1、无论你在哪个分支上,git remote update origin -p或者--prune
然后在vscode 左下角点击, 然后输入要拉取的分支名按回车即自动切换到要拉取的分支(拉取带origin才是远程仓库的分支)
四、gitlab设置自己的clone权限:(不执行以下步骤,会clone不了代码)
手机要安装 身份验证器app,用于获取动态验证码
克隆仓库在本地之前,先在gitlab的右上角账号图标下拉选择settings, 跳转以后选择左边table的 Access Tokens , 在name的输入框内 输入自己的AD, Expires at 中不填则是永久使用,要将 scropes 里的 4项 api、 read_user、 read_repository 、write_repository 都勾选, 然后点击 create personal access token, 然后页面最上面会出现
Your New Personal Access Token, 复制token, 然后用命令行在文件夹中git clone 远程http的项目地址,会出现让你输入远程名字,就是输入你刚刚在gielab输入的Ad名,然后会出现让你输入密码,你输入刚刚复制的token即可,然后就会自动克隆仓库下来
五、gitlab合并代码给code review 和 merge
将自己的代码push到getlab后,选择merge requests合并请求中点击New merge requests 新建合并请求给负责人,然后在Source branch 中 输入自己新建的分支, 然后在Target branch 中输入要合并的分支, 然后点击继续就行,然后把链接发给负责人 review,没问题则会让负责人点merge, 有问题则会把对应的问题点标给你
gitlab基本的命令
1) 远程仓库相关命令
-
检出仓库:$ git clone git://github.com/jquery/jquery.git
-
查看远程仓库:$ git remote -v
-
添加远程仓库:$ git remote add [name] [url]
-
删除远程仓库:$ git remote rm [name]
-
修改远程仓库:$ git remote set-url --push[name][newUrl]
-
拉取远程仓库:$ git pull [remoteName] [localBranchName]
-
推送远程仓库:$ git push [remoteName] [localBranchName]
2)分支(branch)操作相关命令
- 查看本地分支:$ git branch
- 查看远程分支:$ git branch -r
- 创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支
- 切换分支:$ git checkout [name]
- 创建新分支并立即切换到新分支:$ git checkout -b [name]
- 删除分支:$ git branch -d [name] ---- -d选项只能删除已经参与了合并的分支,对于未有合并的分支是无法删除的。如果想强制删除一个分支,可以使用-D选项
- 合并分支:$ git merge [name] ----将名称为[name]的分支与当前分支合并
- 创建远程分支(本地分支push到远程):$ git push origin [name]
- 删除远程分支:$ git push origin :heads/[name]
我从master分支创建了一个issue5560分支,做了一些修改后,使用git push origin master提交,但是显示的结果却是'Everything up-to-date',发生问题的原因是git push origin master 在没有track远程分支的本地分支中默认提交的master分支,因为master分支默认指向了origin master 分支,这里要使用git push origin issue5560:master 就可以把issue5560推送到远程的master分支了。
如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,那么可以这么做。
git push origin test:test // 提交本地test分支作为远程的test分支
如果想删除远程的分支呢?类似于上面,如果:左边的分支为空,那么将删除:右边的远程的分支。
$ git push origin :test // 刚提交到远程的test将被删除,但是本地还会保存的,不用担心
3)版本(tag)操作相关命令
- 查看版本:$ git tag
- 创建版本:$ git tag [name]
- 删除版本:$ git tag -d [name]
- 查看远程版本:$ git tag -r
- 创建远程版本(本地版本push到远程):$ git push origin [name]
- 删除远程版本:$ git push origin :refs/tags/[name]
4) 子模块(submodule)相关操作命令
- 添加子模块:$ git submodule add [url] [path]
如:$ git submodule add git://github.com/soberh/ui-libs.git src/main/webapp/ui-libs
- 初始化子模块:$ git submodule init ----只在首次检出仓库时运行一次就行
- 更新子模块:$ git submodule update ----每次更新或切换分支后都需要运行一下
- 删除子模块:(分4步走哦)
1)$ git rm --cached [path]
2) 编辑“.gitmodules”文件,将子模块的相关配置节点删除掉
3) 编辑“.git/config”文件,将子模块的相关配置节点删除掉
4) 手动删除子模块残留的目录
5)忽略一些文件、文件夹不提交
在仓库根目录下创建名称为“.gitignore”的文件,写入不需要的文件夹名或文件,每个元素占一行即可,如
target
bin
*.db
- git pull:相当于是从远程获取最新版本并merge到本地
- git pull origin master git远程分支关联的一种方法
github上已经有master分支 和dev分支
在本地
- git checkout -b dev 新建并切换到本地dev分支
- git pull origin dev 本地分支与远程分支相关联
在本地新建分支并推送到远程
- git checkout -b test
- git push origin test 这样远程仓库中也就创建了一个test分支
==================================================================
1. 克隆代码
git clone https://github.com/master-dev.git
# 这个git路径是无效的,示例而已
2. 查看所有分支
git branch --all
# 默认只有master分支,所以会看到如下两个分支
# master[本地主分支] origin/master[远程主分支]
# 新克隆下来的代码默认master和origin/master是关联的,也就是他们的代码保持同步
3. 创建本地新的dev分支
git branch dev # 创建本地分支
git branch # 查看分支
# 这是会看到master和dev,而且master上会有一个星号
# 这个时候dev是一个本地分支,远程仓库不知道它的存在
# 本地分支可以不同步到远程仓库,我们可以在dev开发,然后merge到master,使用master同步代码,当然也可以同步
4. 发布dev分支
发布dev分支指的是同步dev分支的代码到远程服务器
git push origin dev:dev # 这样远程仓库也有一个dev分支了
5. 在dev分支开发代码
git checkout dev # 切换到dev分支进行开发
# 开发代码之后,我们有两个选择
# 第一个:如果功能开发完成了,可以合并主分支
git checkout master # 切换到主分支
git merge dev # 把dev分支的更改和master合并
git push # 提交主分支代码远程
git checkout dev # 切换到dev远程分支
git push # 提交dev分支到远程
# 第二个:如果功能没有完成,可以直接推送
git push # 提交到dev远程分支
# 注意:在分支切换之前最好先commit全部的改变,除非你真的知道自己在做什么
6. 删除分支
git push origin :dev # 删除远程dev分支,危险命令
# 下面两条是删除本地分支
git checkout master # 切换到master分支
git branch -d dev # 删除本地dev分支
--------------------------------------------------------------------------------------------
今天真是崩溃的,由于之前的同事各自作战,一个只在master提交代码,一个只在developer上提交,两人各自做各自的,今天我去合并代码,我的老天爷,一堆冲突,算了,不玩了,我想了半天想到的是我把他们的master和developer down到本地,不合并了,不然没法玩下去了,等找好代码之后再说。
1.然后先去pull了master到本地,
2.接着创建了develop本地,然后与remote关联 git branch --set-upstream-to origin/dev dev
3.想直接 git pull origin dev:dev 结果发现不行,因为远程的dev和远程的master八百年没有打交道了,一堆冲突。
4. get pull一下发现报出冲突原因,想清楚了,不合并了。
5.git reset --hard origin/dev 直接将其隔离
Git pull error: Your local changes to the following files would be overwritten by merge: git reset --hard origin/dev 直接将其解决
这里再说一下可以使用
-
git fetch origin develop
-
git checkout develop
-
git merge origin/develop代替上述的方法,防止冲突发生。
gitlab上传项目到远程:
步骤 一 、在GitLab上新建Git仓库。
二、建立本地Git仓库。 直接上代码:
1.初始化本地仓库。在本地项目根目录中打开Gti命令行,执行: git init //初始化本地仓库
2.将本地项目的所有文件添加到暂存区。小数点 “.” ,意为添加文件夹下的所有文件;也可以将 “.” 换成具体的文件名,如果想添加项目中的指定文件,那就把 “.” 改为指定文件名即可。 执行: git add . //将本地项目的所有文件添加到暂存区 3.将暂存区的文件提交到本地仓库,并添加说明信息: 执行: git commit -m "说明信息" 至此,本地项目提交到本地仓库完成。
三、将本地仓库代码推送到GitLab远端仓库。
1.首先,建立本地仓库和远端GitLab仓库的关联关系: 执行:git remote add origin https://gitlab\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*.git 在这一步时如果出现错误:fatal:remote origin already exists,先清除一下关联关系:git remote rm origin 再重新关联:git remote add origin https://gitlab\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*.git
2.检查关联是否已建立且正确:git remote -v 3.将代码由本地仓库上传到 GitLab 远端仓库,依次执行下列语句。 获取远程库与本地同步合并:git pull --rebase origin master 如果远程库不为空必须做这一步,否则后面的提交会失败,不加这句可能报错,原因是 GitLab中的 README.md 文件不在本地仓库中,可以通过该命令进行代码合并。 把当前分支 master 推送到远程: git push -u origin master 执行完之后如果无错误就上传成功了,需要提示的是这里的 master 是 GitLab默认的分支,如果你本地的当前分支不是 master,就用git checkout master命令切换到master分支,如果你想用本地当前分支上传代码,则把上面两条命令里的 master 切换成你的当前分支名即可。 如果推送不成功,先pull一下,如果报错fatal: refusing to merge unrelated histories,说明本地和远端的git库是两个 根本不相干的 git 库, 然后本地要去推送到远端, 远端觉得这个本地库跟自己不相干, 所以告知无法合并。解决方法:强制合并: git pull origin master --allow-unrelated-histories 后面加上 --allow-unrelated-histories ,意思是把两段不相干的分支进行强行合并。 然后再将代码推送到远端。
至此,操作成功。