赞
踩
Eg:文件名称最初新建的时候是大写,但是后面想要改成小写的,修改完之后提交打状态的时候 git status 发现并没有修改的记录,提交之后在 git 上也没有修改
解决办法:因为 git 默认是不区分大小写的,所以 git status 是不会提示你有修改的 。
1、可以通过 git config --get core.ignorecase 查看默认配置
2、通过 git config core.ignorecase false 设置为区分大小写
然后 git status 就可以看到修改的东西,然后就是进行正常的操作就可以提交了
但是你会发现一个问题,在本地是只有一个你修改过后的文件,但是在线上大小写两个都会存在,而且你必须删除才行(直接git上操作删除即可),然后你会发现你把大写的删除之后,线上小写的文件依旧存在,但是本地的那个文件没有了,这时候就需要本地再重新建一个一样的,再次重新提交即可
其实最好是一开始就把git 的默认配置修改掉(区分大小写的模式),后面的操作其实也可以直接本地先备份再删除提交
first:
git 提交某个push记录 git cherry-pick fa13060b8cf2052138d41d183d15807eaa1353f9
git log --format='%aN' | sort -u | while read name; do echo -en "$name\t"; git log --author="$name" --pretty=tformat: --numstat | awk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s, removed lines: %s, total lines: %s\n", add, subs, loc }' -; done
查看git提交历史人数,代码行数等等
如果想打印且打印当前本地分支名,可以用 git symbolic-ref --short HEAD 命令。
也可以使用 git rev-parse --abbrev-ref HEAD 命令来打印且只打印当前分支名。
a.远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch
git push
b.远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch
git push -u origin/remote_branch
c.远程没有remote_branch分支并,本地已经切换到local_branch
git push origin local_branch:remote_branch
当我想从远程仓库里拉取一条本地不存在的分支时:
git checkout -b 本地分支名 origin/远程分支名
这个将会自动创建一个新的本地分支,并与指定的远程分支关联起来。
例如远程仓库里有个分支dev2,我本地没有该分支,我要把dev2拉到我本地:
若成功,将会在本地创建新分支dev2,并自动切到dev2上。
如果出现提示:
- fatal: Cannot update paths and switch to branch 'dev2' at the same time.
- Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。我们需要先执行
git fetch
然后再执行
git checkout -b 本地分支名 origin/远程分支名
一. git版本回退方法 (覆盖历史)
- git reset --hard HEAD //# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
-
- git add . //添加到暂存区
-
- git commit ‘roll-back’ //提交到仓库区
-
- git push -f origin master //强制推到 master仓库 (很危险,会导致某些中间版本记录消失,本地用用还可以,线上慎用)
其实在推送时,尽量避免git push -f
的操作,或者说git push -f
是一个需要谨慎的操作,它是将本地历史覆盖到远端仓库的行为。
当然也并非禁止,有时,如果代码组内review后,确认代码正确无误,保证大家未pull的情况下,强制推送后,可以保持目录树清洁。
git版本回退 (保留历史)
git revert HEAD //# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
二.使用Git下载指定分支
命令为: git clone -b 分支名 仓库地址
使用Git下载master分支代码,使用命令:git clone -b master https://git.oschina.net/oschina/android-app.git
三.git 提交文件
一次 add 多个文件的方法 git add file_1 file_2 file_3 多个文件用 空格 隔开
git 提交 文件夹的方法 git add catalog_name
修改或添加了多个文件,但只想提交部分代码的正确方式:
- git add config/esqueryconfig.php //提交到暂存区
-
- git stash -u -k //忽略其他,关键一步
-
- git status //可以看到只有一个文件需要commit
-
- git commit -m 'es升级配置文件' //提交暂存区
-
- git pull //拉去合并
-
- git push //推到远端仓库
四.git删除分支
- // 本地分支
- git branch -d 分支名称
-
- git branch -D 分支名称
-
- // 远程分支
- git push origin –delete 分支名
五.git添加到暂存区并提交
git commit -a -m "信息"
六.远程仓库管理
修改仓库名
一般来讲,默认情况下,在执行clone或者其他操作时,仓库名都是 origin 如果说我们想给他改改名字,比如我不喜欢origin这个名字,想改为 oschina 那么就要在仓库目录下执行命令:
git remote rename origin oschina
这样 你的远程仓库名字就改成了oschina,同样,以后推送时执行的命令就不再是 git push origin master 而是 git push oschina master 拉取也是一样的
添加一个仓库
在不执行克隆操作时,如果想将一个远程仓库添加到本地的仓库中,可以执行
git remote add origin 仓库地址
注意: 1.origin是你的仓库的别名 可以随便改,但请务必不要与已有的仓库别名冲突 2. 仓库地址一般来讲支持 http/https/ssh/git协议,其他协议地址请勿添加
查看当前仓库对应的远程仓库地址
git remote -v
这条命令能显示你当前仓库中已经添加了的仓库名和对应的仓库地址,通常来讲,会有两条一模一样的记录,分别是fetch和push,其中fetch是用来从远程同步 push是用来推送到远程
修改仓库对应的远程仓库地址
git remote set-url origin 仓库地址
git日常开发流程
1.先将线上代码克隆到本地 git clone -b branch(线上仓库分支名) 仓库地址
2.进行开发时,在本地新建一个分支并切换到这个分支 git checkout -b order(分支名称)
3.在这个分支上开发自己的功能,如果遇到别的紧急开发需求,记得代码要提交到这个分支上,以免丢失。 git commit -a -m "提交信息", 切换分支的时候最好保持一个清洁的工作区域。
4.然后切换到 最初的分支(branch)上,新建一个本地分支并切换到这个分支上 git checkout -b hotFix(分支名称)
5.在这个新分支上进行开发,正常的commit提交等操作,在完成以后切换到最初的分支(branch)上,git checkout branch
6.然后进行分支合并 git merge hotFix, 合并完成后记得 git commit -a -m "提交信息" , git push 到线上去测试
7.这时候再切换到order分支上继续开发, git checkout order ,开发完成也记得要comit。
8.然后再切回branch分支上,就行与order分支的合并,最终push上线测试。(PS:有时候会遇到代码冲突,这时候需要自己手动或其他方法解决下冲突)
9.最后可以把不需要的分支删除掉 git branch -d hotfix(分支名称)
一. 有时候可能是对应多个线上分支,比如branch(测试)分支 与 stable (线上)分支,这个时候还需要额外创建两个(或更多)不同的分支。
1.使用 git checkout -b stable(本地分支名称) origin/stable (线上分支名称) (即在本地新建了一个stable的分支,拉取了对应线上satble分支的代码。)
有时候也会失败,如果出现提示:
- fatal: Cannot update paths and switch to branch 'dev2' at the same time.
- Did you intend to checkout 'origin/dev2' which can not be resolved as commit?
表示拉取不成功。我们需要先执行 git fetch
然后再执行 git checkout -b 本地分支名 origin/远程分支名 即可。
2.然后再后续规范开发的时候,新建本地分支时,都一定要切换到stable分支去开新分支。先从stable分支上去 git checkout -b order(分支名称) 新开一个分支去开发功能。(这样的好处是在多人开发时,线上branch分支上面可能有很多垃圾代码,防止污染stable分支)
3.再开发完成之后,需要在branch分支上测试,那就切换到branch分支,再去merge 新开发order的分支。
4.如果最终测试OK了,就可以再切换到stable分支,将新开发order的分支merge上去。
二. 上述情况是在对应只有一个线上的orgin仓库的时候(如des项目就是这样)
但是有时候的情况却更复杂一点,需要用到多个不同的线上分支(如火车票TVA)
origin与stable明显是两个不同线上的仓库,这个时候怎么再本地拉取代码呢?
1.随便在本地可以新建一个分支 git checkout -b order(分支名字)
2.使用 git pull <remote> <branch> 去拉取指定分支的代码即可。
如git pull stable develop_2,这样就将线上的stable 仓库的develop_2代码拉倒order 分支上了。
3.如果git push 的时候可能出现提示没有关联远程分支。那么就关联一下。
git branch --set-upstream-to=origin/remote_branch your_branch
其中,origin/remote_branch是你本地分支对应的远程分支;your_branch是你当前的本地分支。
4.如果关联完push的时候还是报如下类似错误
原因是本地分支名字与线上不符合,按照提示git push stable HEAD:XX先提交就好。
可能有点麻烦了,但是今天坑确实是这样踩过来的,今后找到更好的方法会持续更新。
(其实上述一中的情况也可以使用这样方法去做,都是OK的)
参考文章:git 拉取远程指定分支 pull本地不存在的分支
详细的GIT 日常开发操作流程可参考 Git详解之三 Git分支 - 跪着行走的BoY - 博客园
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。