内部git常用总结
Posted lixuwu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部git常用总结相关的知识,希望对你有一定的参考价值。
摘要:介绍一下高效率上库的方法,省去合代码的流程。 推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。 1、clone:git clone [email protected]:TACS/td_utfp.git test (test为文件夹名) 2、设置库: git remote -v 查看当前库 添加远程本地库:git remote add origin [email protected]:w00424187/utfp.git 添加远程主干库:git remote add upstream [email protected]:TACS/td_u
介绍一下高效率上库的方法,省去合代码的流程。
推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。
在linux服务器上生成key:
ssh-keygen
然后将自己对应用户路径下的.ssh文件夹中id_rsa.pub文件内容复制,并在isource上配置ssh key。
参考文档:http://3ms.huawei.com/km/blogs/details/2330371
http://3ms.huawei.com/km/blogs/details/5230201
先将以下基础看完,最后再看上库最简单的三部曲
1、clone:git clone [email protected]:TACS/td_utfp.git test
(test为文件夹名)
2、设置库:
git remote -v 查看当前库
添加远程本地库:git remote add origin [email protected]:w00424187/utfp.git
添加远程主干库:git remote add upstream [email protected]:TACS/td_utfp.git
origin 和 upstream看个人习惯相反设置
如果地址或者名称取错了,不能修改,只能先移除再重新添加
git remote remove origin
3、更新库上库到本地
git fetch upstream
git fetch origin
或者 git remote update
ps:用小乌龟Pull操作等于:git fetch upstream + git merge
为了避免冲突,所以最好采用先fetch,再切分支方式,不要直接mege
4、基于库上最新代码develop分支切分支
git checkout -b test upstream/develop
(test为本地分支取名)
本地切分支:git checkout test1
查看当前分支:git branch
删除分支:git branch -D test1
5、在当前分支修改代码
查看当前文件变更情况:git status
放弃变更文件所有更改:git checkout .
(将.换成某个文件的全路径,表示放弃该文件的修改)
ps:git checkout 只会放弃没有add commit的文件的修改(也就是git status中红色部分的文件)
删除未追踪(untracked)文件:
git clean -f 删除文件
git clean -n 显示要删除的文件和目录
git clean -df 删除文件和目录
将更改添加到缓存:git add .
(将.换成某个文件的全路径,表示添加某一指定文件)
6、add后提交
提交:git commit
此时进入提交界面
输入 i : 进入插入模式,将commit信息补全后
输入 esc : 退出插入模式
输入 shift + ; :再输入 wq 保存并退出
7、提交后查看提交情况:git log 可以查到所有的commit id
8、若提交后又有些更改,更改后继续add
提交时输入 git commit --amend
表示将当前更改合入上一次commit,此时虽两次提交,但只会有一个commit号
也可以理解成修改上一次commit,可以修改commit信息
9、若提交后发现多提交了一个文件
git log:查找所有commit号,找到上次你提交的commit的号的上一个commit号(通常为别人提交的)
git reset commit_id(上一步找到的commit号)
表示回到那个commit点,你修改的代码不会丢,会回到add前的状态
此时用git checkout 或者rm将不想要的删了 ,或者在add时不要全部添加,重新添加想要提交的文件
然后重新git commit提交(注意不是git commit --amend,因为你的提交已经被reset了)
10、上传到远端库
git push origin test:test --force
(git push origin(远端本地库) test(本地分支名):test(远端分支名,没有会自动创建) --force)
现在就可以提pr了
11、如果想向publish和develop各提一个pr,这样避免合代码:
步骤1,按以上操作先向develop提一个pr
步骤2,基于远端库的publish切一个本地分支:
git checkout -b test_pub upstream/br_utsv1r5_publish
步骤3,找到修改的向远端库develop推的commit号(两种方式,一种是pr了、链接有,直接复制,一种是切到提develop的分支,然后git log)
git cherry-pick commit_id
这句话就完成了合入代码并以相同commit信息提交的流程
步骤4,push到远端库上重新提pr即可
12、解决冲突
git cherry-pick commit_id
这句有时候会失败,原因是遇到了冲突
步骤1,输入:git mergetool
步骤2,输入:shift + ;
此时进入了查看冲突文件的修改的界面,但是这个界面很花不好看,我通常不习惯在这里解决冲突步骤3 ,输入:wqa
不做任何更改就退出
步骤4,此时会提示是否已解决冲突,选择已解决
ps:其实并未真的解决,文件里还有些head <<<<之类的冲突符号,用本地打开冲突文件,然后将你想保留的真实更改在本地重新编辑保存即可
步骤5,git cherry-pick --continue
不输这句继续是无法做别的操作的
冲突成功解决
小窍门
1、只要将每次提交push到远端本地库上,commit号就一定会保留,换一个库也能将更改cherry-pick过来
2、每次开发新特性不必重新clone代码,先fetch再切分支,就是库上最新代码了
3、不要用pull,pull意味着把库上所有的commit(包括别人的)全部cherry-pick过来,
每次只需要切一个最新分支代码,将你的commit部分cherry-pick过来就可以了,免得冲突太多太难解决。
这种方式可以始终基于最新的分支验自己的本地代码。
4、git show commit_id 可以看到这个commit所更改的所有内容
5、服务器上推代码真的非常快,一是不用合代码,用git status可以看到所有变更,一目了然,二是push的速度真的很快
上库三部曲:
1.git status查看变更
git add 添加需要的更改
2.git commit (不是第一次提交就git commit --amend)
3.git push
有写的不对的地方,或者更好的提高效率的办法,请大家指正,多交流,谢谢
以上是关于内部git常用总结的主要内容,如果未能解决你的问题,请参考以下文章