git工具从远程克隆时,不是只克隆主干,也不是只克隆分支,是克隆所有项目代码,不区分主干和分支(时间点)。
所有分支和主干的代码相同的部分都是公用的。不同分支和主干的区别只是提交点不同而已。GIT追踪和管理的是修改而非文件。HEAD指向当前分支
三大本地回退:(23reset很好区别,只有回退版本区才会用到硬回退)
公共代码区:git checkout -- filename
暂存区:git reset head filename
版本区:git reset --hard commitID
远程分支回退:
git reset --hard commitID (先回退本地)
git push -f origin HEAD:expedia_origin
https://www.cnblogs.com/qianqiannian/p/6011404.html
版本回退见图
查看分支切换分支:
git branch -a 和 git cheakout 分支名
git branch -vv(两个v):查看本地分支对应的远程分支
删除本地分支名:
git branch -d <BranchName>
删除远程分支名:
git push origin --delete <BranchName>
本地在当前分支基础上新建分支并切到该分支
git cheakout -b 分支名
检出远程别人的分支:
git checkout -b local分支 remote分支
本地新建分支上传到远程:
git push origin testBrabch(默认和本地名一样)
上传代码:
git push origin HEAD:expedia_origin
切分之时若当前分支有未提交的更改,切换后会将更改带到切过去的分支中(更改依然停留在工作区会有切分支覆盖提示)。测试环境没有切过去有提示是脚本写的不是git本身有判断提示的作用。
不更新工程怎么能看到别人的分支呢,切记先更新。
查看版本号:
git rev-parse --short HEAD
--short是前几位,不加此参数显示为全部长度
git pull
= git fetch
+ merge to local
git checkout -- filename :已添加到暂存区的修改不起作用
提交到本地后怎么回退?
Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100
git reset –-soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可;
git reset -–hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容,撤销的commit中所包含的更改被冲掉
git log/reflog 查看历史版本号(历史提交注释属于上面的版本,从上往下看也能看出来)
暂时只能用HEAD参数回退,具体版本号作参数回退时报错:不能使用路径进行硬重置
git stash :保存当前工作区和暂存区的修改。
git stash save “描述信息” :如果保存的内容过多可能会导致无法辨别需要恢复的保存记录,这时候就加上 save参数后面双引号后面填写此次保存的描述信息。
git stash list : 显示保存列表。
git stash pop : 恢复最近保存的记录并把恢复的记录从保存列表中删除。只恢复公共代码区!(默认会将被恢复的操作保留在工作区,但是不会自动帮你重新暂存)
git stash pop --index :与上面命令的效果一样但是还会恢复暂存区!(公共代码区当然不会显示,恢复暂存区意味着将恢复的公共代码区的东西添加进了暂存区当然代码区就看不到git提示了,但去代码里看肯定有。)
git stash pop stash@{序号} :恢复保存列表里面指定的保存记录,并把恢复的记录从保存列表中删除。
git stash --patch :保存之前先比较工作区和HEAD之间的区别,然后选择是否重新编辑需要保存的文件。
git stash apply :恢复最近保存的记录但不会删除保存列表里面对应的记录。(默认会将被恢复的操作保留在工作区,但是不会自动帮你重新暂存)
git stash drop :删除保存列表里面最近保存的记录。后面加上 stash@{序号}可以删除指定的保存记录。
git stash clear :删除保存列表里面所以的保存记录。
git stash 分支名 stash@{序号}:修改了demo里面的内容之后使用 git stash 保存demo文件里面的修改,如果此时你修改了demo文件然后在使用git stash pop或者git stash apply 恢复之前修改demo里的内容,那么此时可能会引发冲突。此时就可以使用此命令。这个命令会创建一个分支然后在创建的分支上把保存的记录恢复出来。
git tag --list
查看已有的tag
忽略未追踪的文件和忽略已追踪的文件:
1.未追踪:在.ignore文件中加入要忽略的文件
2.彻底已追踪:
git rm -r(不是rf否则会干掉工作区的文件) --cached User.php
在.ignore文件中加入要忽略的文件
/.settings/
/.project
# IntelliJ project files
target/
*.jar
*.war
*.zip
*.tar
*.tar.gz
# eclipse ignore
.settings/
.project
.classpath
# idea ignore
.idea/
*.ipr
*.iml
*.iws
# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db
*.ear
**/redis/RedisUtil.java
**/target
mybatis-generator-config.xml
# IntelliJ project files
.idea
**.iml
out
out/
gen
**/logs
**/log
.buildpath
.project
.settings/
.DS_Store
/nbproject/private/
*.lst
处理思维:
先判定是否需要追踪:
否:物理删除或加入ignore
是:判断改动所处位置——代码区checkout/暂存区reset or rm/提交后的分支区reset
git流程图:
git reset commitId fileName(HEAD指最新的版本,最新添加的才会撤销历史缓存)
预发环境成功和失败的原因:
Cloning the remote Git repository
Using shallow clone
Avoid fetching tags
Cloning repository http://source.jd.com/app/ihsoa.jd.com.git
> git init /home/jenkins/workspace/121329/ihsoa.jd.com # timeout=10
Fetching upstream changes from http://source.jd.com/app/ihsoa.jd.com.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --no-tags --progress http://source.jd.com/app/ihsoa.jd.com.git +refs/heads/*:refs/remotes/testBrabch/* --depth=1
> git config remote.testBrabch.url http://source.jd.com/app/ihsoa.jd.com.git # timeout=10
> git config --add remote.testBrabch.fetch +refs/heads/*:refs/remotes/testBrabch/* # timeout=10
> git config remote.testBrabch.url http://source.jd.com/app/ihsoa.jd.com.git # timeout=10
Fetching upstream changes from http://source.jd.com/app/ihsoa.jd.com.git
using GIT_ASKPASS to set credentials
> git fetch --no-tags --progress http://source.jd.com/app/ihsoa.jd.com.git +refs/heads/*:refs/remotes/testBrabch/* --depth=1
> git rev-parse testBrabch/testBrabch^{commit} # timeout=10
> git rev-parse testBrabch^{commit} # timeout=10
Couldn't find any revision to build. Verify the repository and branch configuration for this job.
Cloning the remote Git repository
Using shallow clone
Avoid fetching tags
Cloning repository http://source.jd.com/app/ihsoa.jd.com.git
> git init /home/jenkins/workspace/120875/ihsoa.jd.com # timeout=10
Fetching upstream changes from http://source.jd.com/app/ihsoa.jd.com.git
> git --version # timeout=10
using GIT_ASKPASS to set credentials
> git fetch --no-tags --progress http://source.jd.com/app/ihsoa.jd.com.git +refs/heads/*:refs/remotes/master_XSS_CSRF/* --depth=1
> git config remote.master_XSS_CSRF.url http://source.jd.com/app/ihsoa.jd.com.git # timeout=10
> git config --add remote.master_XSS_CSRF.fetch +refs/heads/*:refs/remotes/master_XSS_CSRF/* # timeout=10
> git config remote.master_XSS_CSRF.url http://source.jd.com/app/ihsoa.jd.com.git # timeout=10
Fetching upstream changes from http://source.jd.com/app/ihsoa.jd.com.git
using GIT_ASKPASS to set credentials
> git fetch --no-tags --progress http://source.jd.com/app/ihsoa.jd.com.git +refs/heads/*:refs/remotes/master_XSS_CSRF/* --depth=1
> git rev-parse master_XSS_CSRF/master_XSS_CSRF^{commit} # timeout=10
Checking out Revision a2d9eba07a02c2b864163dc5decde67b32c982d1 (master_XSS_CSRF/master_XSS_CSRF)
> git config core.sparsecheckout # timeout=10
> git checkout -f a2d9eba07a02c2b864163dc5decde67b32c982d1
Commit message: "京东动力"
> git rev-list --no-walk 5e129050d5680ce680d9067710e2c587ddfb157b # timeout=10
已经找到答案了,自问自答吧。
git branch -vv(两个v),就能够看到本地分支跟踪的远程分支。
git config --global user.email "guojinhua@jd.com"
git config --global user.name "guojinhua8"
sourceTree里显示的本地分支,pull相当于把远程分支处理后commit到了版本区,所以也是相当于commit了一次,不管你pull的是谁的,肯定显示提交者(commit的人)是你