git

Git整理
Sudo apt-get install git-core
1、创建代码仓库
配置身份:git config –global user.name ‘username”
git config –global user.email ‘username@gmial.com”
进入目录/f/codes/AndroidFirstLine/BroadcastBestPractice/
创建代码仓:git init (会在目录下生成隐藏的.git文件夹,删除该文件夹即为删除本地仓库)
2、提交本地代码
Git add filename(添加单个文件)
Git add src (添加整个src目录下的文件)
Git add .(点表示所有文件,批量操作)
?
Git commit –m “First commit.”(-m后跟描述信息)
3、忽略文件
创建.gitignore的文件,添加时就可以排除该文件中涉及的目录。具体有什么实际的应用意义?
4、查看修改内容
查看状态:git status,包括分支状态等。
查看更改的内容:git diff (后续可跟文件路径和文件名)
5、撤销未交的修改
撤销未提交的修改:git checkout 文件路径和文件名(仅适用于未用add添加的文件)
撤销已add但未提交commit的修改:git reset HEAD 文件路径和文件名
撤销已经commit的提交 git reset --hard HEAD^^^^^
当前是HEAD,上一个是HEAD^,再上一个就是HEAD^^
6、查看提交记录
git log (可以跟某个文件名,--文件名)
git log –stat 显示每个文件的修改行数等
git log –p 查每个文件的修改内容
git log –stat –since=’24 hours’ 查过去24小时内的修改
git log—name-only 查提交的文件列表
git log –name-status 查提交的文件列表及其状态:M:修改,A:增加,D:删除
git log可以按分支查看问题单列表,–no-merges:表示去掉merge节点,没有冲突的merge节点实际不包含任何修改
gitk –文件名
7、分支用法
各个版本的保留复印件
查看分支:git branch –a
创建分支:git branch 分支名
切换到分支:git checkout 分支名 (要切换到的分支名)
切换分支:git checkout -b 本地分支名 远端分支名(origin/XX)创建本地分支名,并将工作区切换到XX的远端分支关联的本地分支,切换分支后,注意push的地址
创建本地分支:git checkout 本地分支名
分支上修改bug不会影响master,所以master上这个bug仍然存在。
分支修改合并到master上:git master
git merge 分支名
删除分支:git branch –D 分支名
8、远程版本库协作
下载远程版本库的代码:git clone https://github.com/example/test.git
本地同步到远程版本库:git push origin master(origin指远程版本库的git地址,master指代同步到哪一个分支上)(本地所有??)可以只同步某一块吗??
远程版本库同步到本地:git fetch origin master(同步下来的代码未合并到任何分支,存放在origin/master分支上),git diff origin/master,查看远程版本库到底修改了那些东西,再合并分支:git merge origin/master。
远程同步到本地:git pull origin master (直接这么使用,还是代表有什么意义)
9、添加空目录
由于git本身机制原因,默认是不能添加空的文件夹,如果由于编译需要,一定要将空目录添加进来。可以在空目录下添加一个.gitignore。这样的话目录就可以添加进来了。
对于某个git仓下空目录比较多的情况,对这个仓下的所有空目录批量添加.gitignore命令:find . -type d -empty -exec touch {}/.gitignore \; (分号请不要拷贝遗漏了)
?
10、查询上库
git blame;命令时,会逐行显示文件,并在每一行的行首显示commit号,提交者,最早的提交日期
11、替换本地修改
repo forall -c?git reset --hard HEAD
repo forall -c?‘单仓的git命令’//对所有git仓执行命令,批量操作
?
12、查询本地库和远程库的差异
repo status
13、同步最新代码
Git pull --rebase
实例:
不需要自己某一个push但是没有入库的提交,可以先找到该提交的前一个提交的commit——id的,299aa4c07e39be5d15115e5eae2f88a58340cdc5,
执行 git reset --hard 299aa4c07e39be5d15115e5eae2f88a58340cdc5,表示回退到想撤回的提交前,(补充:当前是HEAD,上一个是HEAD^,再上一个就是HEAD^^)
再同步远程库的最新代码,git pull --rebase
14、git reflog
实例,同上,想回退到某一个push但是未入库的提交
先是git reflog ,弹出回退提示,可以根据数字和后续提示找到想回退的点,
执行git reset --hard HEAD@{5},数字需要修改。
15、待研究
git reset --hard?63ee781


git cherry-pick?63ee78
16、暂存
Git stash

Git stash list查看所有的栈信息 

 git commit -a --amend

参考博客:https:blog.csdn.net/liuxu0703/article/details/54289873

 

//linux
repo init -u ssh://XXX:29418/tAPP810_TD/.repo/manifest.git -m master.xml
repo init -u ssh://XXX:29418/tAPP810_TD/.repo/manifest.git -m 分支名.xml

repo sync//同步代码
repo sync -d -c
repo forall –c git pull//同步所有仓
repo forall -c git checkout -b 本地分支名称(自定义) 服务器分支名称
repo forall -c git reset --hard HEAD//废弃修改
repo forall -c git checkout your_branch//切分支

//
repo start master --all//创建本地的master分支
repo branches//查看当前的分支名称

已经push了代码,但是在gerrit上review时发现代码还需要修改,咋办?
1. 在上一次提交的库基础上,继续修改代码
2. 修改完毕后,对修改内容执行git add操作
3. 执行git commit --amend,然后会进入修改提交注释的界面,:q 对出即可
4. 执行git push指令上库,此时可能会遇到错误:
error: unpack failed: error Missing tree 1xxxxxxxxx16
此时可执行:
git push --no-thin ssh://XXX:29418/仓路径.git HEAD:refs/for/xxxx

关键点是 --no-thin 选项.
stackoverflow 有答主这么解释的:
默认情况下 git push 会在向服务器推送时进行优化,以将所发送的包降低到最小. 做法是发送时忽略本地仓库和远端仓库中共有的部分. 即 git push 默认是采用 --thin 选项的.
发生本文中出现的问题,貌似是因为某个 git 对象和服务器不一致了.
这时加上 --no-thin 参数,把该传的都传过去,问题就解决了.

 

git reset origin/master//分支名

 

posted @ 2019-04-11 18:01  huinina  阅读(129)  评论(0)    收藏  举报