git使用中碰到的问题,持续更新
目录
3、从windows上面上传项目到git服务器时出现问题:提示换行符不一致
6、Changes not staged for commit:
11、使用Gerrit创建仓库时,必须勾选界面上的“create initial empty commit”选项,否则创建项目以后无法在Gerrit的web界面创建分支
13、当我们在git push以后,在Review后,遇到门禁或不能merger到代码库中,这种情景最让人头疼
16、当要在Gerrit上面做Jenkins持续集成时,需要在Gerrit中添加label verified选项
20、对于有密码的git仓库,在每次pull代码时都需要输入密码,比较麻烦,可以通过配置config文件保存密码,方式如下:
21.在使用git pull命令时,偶然出现卡顿在Compressing objects界面,无法继续更新仓库内容,如下:
22.git apply patch时报错100644->100755,这个是因为git检查到文件的权限发生变化,拒绝打补丁,可以修改git config来忽略这个检查:
28、repo生成manifest文件,需要在包含.repo的工程目录中执行:
1、git删除远程分支
git push origin :branch-name //origin前面必须有空格,表示push一个空分支到远程分支,即可删除远程分支。注意:这个操作需要拥有force push的权限
2、清空git暂存区
git reset HEAD //可以清空之前git add 的内容
3、从windows上面上传项目到git服务器时出现问题:提示换行符不一致
后来发现问题是因为把项目文件是在Linux系统上解压的,然后在拷贝到windows系统上,通过git add命令就会出现该问题,因为git系统在git add文件时会自动去修改某些格式,解决办法是要在windows上面解压文件,然后再git add
4、查看远程分支命令
git branch --all
5、error: The following untracked working tree files would be overwritten by merge:
mydroid/.repo/manifests/RLS_6AM.1.0.xml
Please move or remove them before you can merge
出现这个提示的时候不能切换分支,使用参数-f 强制切换:git checkout -f branch-name
6、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)
(commit or discard the untracked or modified content in submodules)
modified: mydroid/build (modified content)
modified: mydroid/device/ti/jacinto6evm (modified content, untracked content)
modified: mydroid/device/ti/proprietary-open (modified content)
modified: mydroid/external/sepolicy (modified content)
modified: mydroid/frameworks/av (modified content, untracked content)
modified: mydroid/frameworks/base (modified content, untracked content)
modified: mydroid/hardware/ti/dra7xx (modified content)
modified: mydroid/system/core (modified content)
提示modified content, untracked content是因为在add的时候这个目录下面本来就有一个.git文件,自然就会add失败,先删除这个.git文件再add
7、强行切换分支
git checkout -f branch_name
8、unpack failed: error
git.exe push --progress "origin" release:refs/for/release%r=xxx
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 663 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
error: unpack failed: error Missing tree 4201fba85e02299e016f0129621858ec21ac94ae
To (url)
! [remote rejected] release -> refs/for/release%r=xxx(n/a (unpacker error))
error: failed to push some refs to '(url)'
git did not exit cleanly (exit code 1) (593 ms @ 2015/5/15 9:51:12)
解决方法:git push --no-thin origin HEAD:refs/for/release
9、配置git review
git config --global gitreview.username "your name"
10、gitignore
在pull服务器上的代码到本地进行编译时发现编译失败,最后发现导致这个的原因是因为.gitignore文件。在移植其它项目的代码时,由于其它开发人员在该项目上使用过git工具,这个工具会生成一个名为.gitignore的文件,这个文件会自动忽略一些项目文件,在你push到服务器的时候不会上传这些文件,当其它人从服务器上pull代码时,他的本地工程并不包含这些必要的文件,导致编译失败,解决办法就是删除隐藏的.gitignore文件
find . -name .gitignore | xargs rm -rf
查找这些文件是否还存在:
find . -name .gitignore
11、使用Gerrit创建仓库时,必须勾选界面上的“create initial empty commit”选项,否则创建项目以后无法在Gerrit的web界面创建分支
12、更新最新的代码
git pull --rebase
git pull
13、当我们在git push以后,在Review后,遇到门禁或不能merger到代码库中,这种情景最让人头疼
解决方案:
(1) 将本地代码更新到Remote中的某个已知的commitid 里面:
执行git log命令,查看所有commit记录,然后选择一条commitId。
在本地执行git reset --hard commitId ,就是更新本地与Remote中的commitId一致。
现在本地代码是和Remote中的commitId时间相一致的代码。注意,commitId时间不一定是Remote最新时间段代码。
(2)更新本地代码到Remote最新时间代码:
然后执行git pull 命令,更新本地代码到Remote最新的时间代码。
(3) 本地代码与Remote代码相一致,然后在执行提交操作。
执行git add,git commit git push等操
14、强制checkout分支覆盖本地文件
git checkout -f branchname
15、命令创建、删除Gerrit project
#创建Gerrit项目
ssh -p 29418 cnbwu@URL gerrit create-project --empty-commit mytest
#删除Gerrit项目
ssh -p 29418 cnbwu@URL deleteproject delete --yes-really-delete test1
16、当要在Gerrit上面做Jenkins持续集成时,需要在Gerrit中添加label verified选项
#添加Jenkins的verified的文件
[label "Verified"]
function = MaxWithBlock
value = -1 Fails
value = 0 No score
value = +1 Verified
17、获取当前分支名称
git symbolic-ref --short -q HEAD
18、创建裸仓库、克隆
mkdir -p /home/test
cd/home/test
git init --bare hooktest.git
git clone ssh://aaa@110.110.222.111/home/test/hooktest.git
注:1)ssh://也可以改成http://或git@
2)aaa为远程服务器登陆名称
3)克隆地址需要加上远程git仓库的绝对路径home/aaa/test/hook
19、获取当前分支名称
git symbolic-ref --short -q HEAD
20、对于有密码的git仓库,在每次pull代码时都需要输入密码,比较麻烦,可以通过配置config文件保存密码,方式如下:
进入git仓库目录.git,编辑config文件,找到[remote "origin"]选项,在用户名后面加冒号和密码,例如:
url = http://user:123456@10.216.18.185/git/
其中123456就是该仓库的密码,保存退出以后,每次更新代码就不用输入密码了
21.在使用git pull命令时,偶然出现卡顿在Compressing objects界面,无法继续更新仓库内容,如下:
remote: Counting objects: 45, done.
remote: Compressing objects: 100% (30/30), done
git pull无法继续,此时先使用git fetch命令更新远程仓库,再使用git pull则成功更新本地git 仓库。
22.git apply patch时报错100644->100755,这个是因为git检查到文件的权限发生变化,拒绝打补丁,可以修改git config来忽略这个检查:
git config core.filemode false
设置成false后就不会执行这个检查。
23.git切换到空分支
git checkout --orphan
25、git查看两个commit之间的文件修改记录
git diff --name-status HEAD~5 //status参数会显示文件的修改状态,如A(添加)、D(删除)、M(修改)
git diff --name-only HEAD~1 HEAD~10 //only只显示文件名称
26、git添加远程仓库
git remote add 任意名字 远程仓库地址
git remote -v //查看远程仓库详细信息
git remote rm name //删除远程仓库
27、查找文件的提交记录
git blame file_name
28、repo生成manifest文件,需要在包含.repo的工程目录中执行:
repo manifest -o manifest.xml -r
29、gerrit提交出现冲突的解决方式
点击界面的rebase按钮,点击change parent revision,可以同步到最新的节点:
如果仍然出现冲突,只能同步代码到本地,手动解决。
30.git统计两个commit之间所有的记录
git log commit1...commit2
可以统计出commit2中有而commit1中没有的提交记录。
同理可以通过tag名称统计两个tag之间的提交:
git log tag1..tag2
更多推荐
所有评论(0)