1.查看本地分支
$ git branch * br-2.1.2.2 master
2.查看远程分支
$ git branch -r origin/HEAD -> origin/master origin/feature/IOS_visualtrack origin/feature/android_visualtrack origin/master
3.查看所有分支
$ git branch -a * br-2.1.2.2 master remotes/origin/HEAD -> origin/master remotes/origin/br-2.1.2.1 remotes/origin/br-2.1.2.2 remotes/origin/br-2.1.3 remotes/origin/master
4.切换远程分支
$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/Release remotes/origin/master $ git checkout -b myRelease origin/Release Branch myRelease set up to track remote branch Release from origin. Switched to a new branch ‘myRelease‘
PS:作用是checkout远程的Release分支,在本地起名为myRelease分支,并切换到本地的myRelase分支
5.合并分支
合并前要先切回要并入的分支
以下表示要把issue1234分支合并入master分支
$: git checkout master $: git merge issue1234 Merge made by recursive. README | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
6.撤消上一次commit的内容(该操作会彻底回退到某个版本,本地的源码也会变为上一个版本的内容)
git reset --hard <commit-id>
以下表示要撤消“update build gradle configuration file”这一次的commit id,返回到"add battery settings ui"这一次的commit id,
xp.chen@YC-JG-YXKF-PC27 MINGW64 /f/ob ((c8303a9...)) $ git log commit c8303a9e8db2bcf4edb7488e722a380f4e8858ec (HEAD) Author: xp.chen <xp.chen@yuneec.com> Date: Sat Oct 28 09:28:51 2017 +0800 update build gradle configuration file Change-Id: I9ee532fd0d4698613698a64eb754fb98a8559e32 commit 8d8e5ccf24cf6836ab780aa3860270c3876e825a Author: xp.chen <xp.chen@yuneec.com> Date: Sat Oct 28 09:02:01 2017 +0800 add battery settigns ui Change-Id: Ia907ee4e84f54c00a186d31378a7925a6adaba0e xp.chen@YC-JG-YXKF-PC27 MINGW64 /f/ob ((c8303a9...)) $ git reset --hard 8d8e5ccf24cf6836ab780aa3860270c3876e825a HEAD is now at 8d8e5cc add battery settigns ui xp.chen@YC-JG-YXKF-PC27 MINGW64 /f/ob ((8d8e5cc...)) $ git log commit 8d8e5ccf24cf6836ab780aa3860270c3876e825a (HEAD) Author: xp.chen <xp.chen@yuneec.com> Date: Sat Oct 28 09:02:01 2017 +0800 add battery settigns ui Change-Id: Ia907ee4e84f54c00a186d31378a7925a6adaba0e
7. git commit -m 注释换行
git commit -m 注释可以通过单引号来换行,比如:
$ git commit -m ‘ > 1.aaaaa > 2.bbbb > ‘ [master b25154b] 1.aaaaa 2.bbbb 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ss.txt
通过git commit --amend 命令可以查看到刚刚的log信息为
1.aaaaa 2.bbbb
合并代码前,先比较待合代码和远端代码的不同,确定哪些代码需要合。
1、先fork远端库(自己账户下会创建与远端库完全相同的个人库),然后将个人库clone到本地:执行git clone操作, 所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是本地的master分支自动“追踪”origin/master分支;因此,git clone执行后,git remote -v可以看到已经有分支输出。
git clone ssh://git@code-cbu.huawei.com:2233/l00517779/ui_multi_annotation.git
2、进到本地目录, git remote -v:查看远端库3、将要合并的远端主库添加到远端库列表:
git remote add top ssh://git@code-cbu.huawei.com:2233/ModelArts/UI-Console/ui_multi_annotation.git
git remote -v:可以看到多了远端top(top表示远端主机名,而不是远端分支名; 默认有个master分支)
$ git pull top master
remote: Counting objects: 173, done.
remote: Compressing objects: 100% (149/149), done.
remote: Total 173 (delta 90), reused 0 (deRecltaeiving objects: 45% (78/1 0)
Receiving objects: 100% (173/173), 105.75 KiB | 0 bytes/s, done.
Resolving deltas: 100% (90/90), completed with 28 local objects.
From ssh://code-cbu.huawei.com:2233/ModelArts/UI-Console/ui_multi_annotation
* branch master -> FETCH_HEAD
* [new branch] master -> top/master
Updating 2936c86..7a0181c
error: Your local changes to the following files would be overwritten by merge:
EWS-console/src/main/webapp/src/app/business/atelier/configures/atelierRouterConfig.js
Please commit your changes or stash them before you can merge.
Aborting
从远端拉代码到本地报错,因为本地的修改和远端新代码修改冲突了.
5、将未提交的本地修改先暂存:
git stash
6、再从远端拉代码:
git pull top master
7、恢复本地修改:
$ git stash pop
Auto-merging EWS-console/src/main/webapp/src/app/business/atelier/configures/atelierRouterConfig.js
On branch master
Your branch is ahead of ‘origin/master‘ by 14 commits.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: EWS-console/src/main/webapp/src/app/business/atelier/configures/atelierRouterConfig.js
modified: EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/taskListCtrl.js
modified: EWS-console/src/main/webapp/src/app/business/atelier/services/dataService.js
Untracked files:
(use "git add <file>..." to include in what will be committed)
EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/dataLabelTextClassificationManageCtrl.js
EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/dataLabelTextLabelManageCtrl.js
EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/dialog/deleteTag4LabeledTextCtrl.js
EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/dialog/saveTip4TextClassifyCtrl.js
EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/dialog/textClassifyExampleCtrl.js
EWS-console/src/main/webapp/src/app/business/atelier/controllers/labelTask/dialog/textLabelExampleCtrl.js
EWS-console/src/main/webapp/src/app/business/atelier/views/labelTask/dataLabelTextClassificationManage.html
EWS-console/src/main/webapp/src/app/business/atelier/views/labelTask/dataLabelTextLabelManage.html
EWS-console/src/main/webapp/src/app/business/atelier/views/labelTask/dialog/deleteTag4LabeledText.html
EWS-console/src/main/webapp/src/app/business/atelier/views/labelTask/dialog/saveTip4TextClassify.html
EWS-console/src/main/webapp/src/app/business/atelier/views/labelTask/dialog/textClassifyExample.html
EWS-console/src/main/webapp/src/app/business/atelier/views/labelTask/dialog/textLabelExample.html
Auto merge表明远端代码和本地修改合并成功;若出现error,多半是他人合并的修改和自己的修改冲突了(即修改的同一文件),此时手动修改文件(删除>>>和<<<)可解决冲突.8、添加所有修改:
git add .
git status:可查看提交修改前后的状态
9、提交修改:
git commit -m "BUG2019092301515 团队标注:文本分类+命名实体"
10、将本地库推到个人远端库:
git push origin master
11、codeclub网站新建合并请求
Merge Requests -> New Merge Request -> 选择个人远端库分支、主库分支 -> Compare branches and continue -> 选择合并人即可.进入个人远端分支库, 选择Merge Requests,分支名选master,合并的目的远端主库选add top对应的库.
常见git命令:https://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html
修改已提交的commit描述:https://www.jianshu.com/p/098d85a58bf1
提交commit的描述: 均用‘BUG2019110100832’每次commit前均先pull
下次修改代码可以直接使用之前保存的配置文件的添加修改:
将配置文件的添加修改独立成远端某条分支的提交,然后每次需要使用配置文件时,利用git cherry-pick拉该分支合入到当前分支.
cherry-pick使用:https://blog.csdn.net/FightFightFight/article/details/81039050
git pull 报错:‘Cannot pull with rebase‘原因:本地有未暂存的修改解决:https://blog.csdn.net/u012385190/article/details/70670213
本地需求1已commit提MR但没合,现要搞另外一个新需求:
本地新建分支并与远端分支相同:checkout -b 本地新分支 远端库/远端分支
克隆仓库
访问主库<http://code-cbu.huawei.com/ModelArts/DataManager/gaia>,先Fork
Clone 主库
git clone http://code-cbu.huawei.com/ModelArts/DataManager/gaia.git
查看仓库状态
# 显示所有修改状态
git status
# 显示远程库状态
git remote -vv
# 显示分支状态
git branch -vv
此时主库的别名为origin
添加fork仓库
git remote add fork http://code-cbu.huawei.com/l00224488/gaia.git
此时自己仓库的别名为fork
查看本地分支追踪的上游分支
git branch -vv
* master 986c2c20 [origin/master] Merge branch ‘BUG2019083100187_validateRunningTaskForDataset‘ into ‘master‘
master代表本地分支,后面的[origin/master]代表本地分支追踪的是origin的master分支
修改本地分支追踪的上游分支
一般本地分支一定要追origin的某个分支(否则pull更新不到其他人的代码),可以通过如下命令修改分支的上游分支
git branch -u origin/gaia-0831
此示例表示将本地分支最终origin的gaia-0831分支
新建分支
默认本地是使用的master分支,如果在本地新建分支,可以使用
git checkout -b BRANCH_NAME
此分支是基于git本地当前分支创建的,不一定是服务端最新的代码
如果要创建一个和服务端相同的分支,可以使用
git checkout -b BRANCH_NAME origin/BRANCH_NAME
此时本地新建的分支BRANCH_NAME就是拉取服务端BRANCH_NAME的代码
代码修改
先更新本地代码到origin最新的分支
git pull --rebase
--rebase表示变基更新,如果本地有commit,此时会先将服务器的commit拉下来,然后基于服务端最新代码将本地commit
重新合入,保证本地不会出现merge的提交(当然,可能有冲突,另外解决)
修改代码,并commit
git add xxxxx
git commit
再次更新origin的内容
git pull --rebase
解决完冲突之后,提交到fork仓库
git push fork master:master
示例为将本地master分支提交到fork的master分支,分支名称可以任意
追加修改的文件到上一次commit
如果commit之后,还没有push到仓库前,发现还有文件要修改,且要与commit合并,此时可以
先修改文件
执行git add XXXX
将修改文件追加到上一次commit中
git commit --amend
在打开的窗口中修改提交信息,然后:wq保存即可
另外如果commit已push到fork库,但是没有合入origin库,可以按上述逻辑先将文件合入commit,然后强制push到fork库(注
意fork库上对应分支不能有自己其他提交,否则会覆盖丢失)
git push fork master:master -f
修改提交信息
如果commit之后,发现信息有误,可以执行
git commit --amend
在打开的窗口中修改信息,然后:wq保存即可
####合并多个本地提交
比如一个功能本地分为多次提交,最终push上库推荐合并为一个
首先查看本地提交日志
git log
查看自己有多少个提交需要合并
合并多个提交
git rebase -i HEAD~2
表示将本地前2个提交合并
此时会弹出需要合并的提交信息,第一个pick保留,剩余的pick改为s
将
pick a0c4b08f commit1
pick 2b106445 commit2
改为
pick a0c4b08f commit1
s 2b106445 commit2
按:wq保存,此时会另外弹出一个窗口用于编辑最终的提交信息,可以删除多余的内容(注意#是注释,实际不会提交上去),
填写最终的commit信息,然后:wq即可
查看是否合并
git log
本地暂存
当本地有修改东西,在没有commit之前,并不能pull服务端的代码。如要pull代码,且不提交本地修改,可以使用git的stash
功能
# 将本地修改全部暂存起来
git stash
# 查看本地暂存列表
git stash list
# 恢复本地暂存列表第一个提交
git stash pop
# 清空本地暂存列表
git stash clear
解决冲突
如在git pull --rebase时发生冲突,此时也有多种方法解决。
先回滚pull,另外找个目录Clone主库代码,使用Beyond Compare合并自己的代码到新库,然后在新库中commit与
push
git rebase --abort
在Intellij IDEA中,在项目根目录上邮件,点击Git,通过IDEA来合并冲突的文件
原文:https://www.cnblogs.com/luckyboylch/p/12327328.html