内部git常用总结

上库git常用命令总结  

摘要:介绍一下高效率上库的方法,省去合代码的流程。 推荐在linux服务器上完成代码的clone,切分支,编写,编译,提交,push的全部流程。 1、clone:git clone git@rnd-isourceb.huawei.com:TACS/td_utfp.git test (test为文件夹名) 2、设置库: git remote -v 查看当前库 添加远程本地库:git remote add origin git@rnd-isourceb.huawei.com:w00424187/utfp.git 添加远程主干库:git remote add upstream git@rnd-isourceb.huawei.com: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 git@rnd-isourceb.huawei.com:TACS/td_utfp.git test

(test为文件夹名)

 

2、设置库:

git remote -v 查看当前库

添加远程本地库:git remote add origin git@rnd-isourceb.huawei.com:w00424187/utfp.git

 

添加远程主干库:git remote add upstream git@rnd-isourceb.huawei.com: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

ps:为了避免冲突,所以最好采用先fetch,再切分支方式,不要直接pull拉取

 

4、基于库上最新代码develop分支切分支

 ps:此处强烈建议每次fetch库上最新的代码,然后基于最新的远端分支创建一个分支来进行特性开发

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 branch |grep 'branchName' |xargs git branch -D

 

 

 

将更改添加到缓存: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即可

 ps:cherry-pick 相当于把之前的commit id提交到最新的那个分支上面了,还可以继续用amend ——强大

 

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

 ps:git commit --amend 太好用了,特别是对一个分支的反复修改,可以使用同一个commit id。

有写的不对的地方,或者更好的提高效率的办法,请大家指正,多交流,谢谢

 

关于Binary file forbidden解决方案:

如果是合入个人仓(如上图的z00383539仓),可以取消或修改个人仓的二进制门禁,修改方法如下:

点击左上角的按钮 --> Git Hooks/Web Hooks ,配置 Binary file gate页信息,在Allowed files中新增待提交的二进制文件类型,并在Privileged users中新增自己的工号信息。或者直接把Enable binary file gate前的勾去掉关掉二进制门禁。(找不到这个选项,是因为没点击edit按钮)

 

git stash
保存当前工作进度,会把暂存区和工作区的改动保存起来。执行完这个命令后,在运行git status命令,就会发现当前是一个干净的工作区,没有任何改动。使用git stash save 'message...'可以添加一些注释

 https://www.cnblogs.com/tocy/p/git-stash-reference.html

git stash list
显示保存进度的列表。也就意味着,git stash命令可以多次执行。

git stash save 'build files'
#恢复但不删除stash拷贝
git stash apply
git stash pop
#删除stash分支
git stash drop stash@{0}
git stash clear

 

 

 

 

 

 

 

 

posted @ 2018-08-23 20:09  CS408  阅读(2030)  评论(0编辑  收藏  举报