git常用命令
*查看用户名和邮箱git config user.namegit config user.email
- 首先是配置帐号信息 - git config --global user.name xxx- git config --global user.email xxx@bigdatadecode.top
- 查看配置的信息 - git config --list
- 禁止自动换行转换 - git config --global core.autocrlf input
- 查看远程分支 - git branch -a
- 查看本地分支 - git branch
- 创建本地分支并切换 - git checkout -b dev,也可使用- git branch dev和- git checkout dev这两条命令
- 将本地分支推送到远程 - git push origin dev:dev,第一个dev是本地的分支名字,第二个dev是远程分支的名字,远程分支名字可以不存在,会自动创建
- 拉取远程分支 - git pull origin dev
- 合并远程分支, 先创建一个与远程分支同名的本地分支 - git checkout -b test,执行合并命令- git merge dev(此时的当前分支是test,将dev合并到test分支),然后push到远程- git push origin test
- 查看tag - git tag
- 切换tag - git checkout tagName # 类似branch
add时排除个别文件
| 1 | git add -u | 
开发本地分支同步到远程dev
| 1 | # 先将远程dev同步到本地开发分支 test | 
删除分支
git branch -d localBranchName
本地与远程代码冲突
当你pull远程代码时,可能发生冲突,报错内容如下:
| 1 | error: Your local changes to the following files would be overwritten by merge: | 
提示使用stash命令,具体操作如下:
| 1 | git stash # 备份当前的工作区的内容到git栈中 | 
push时发现远程仓库已更新
执行git push报错,内容如下:
| 1 | ! [rejected] main -> main (fetch first) | 
执行git pull拉取最新代码,提示
| 1 | 3e24ca6..cdb884c main -> origin/main | 
执行git pull --no-rebase
| 1 | Merge made by the 'ort' strategy. | 
查看是否存在冲突,如果不存在再次执行git push进行提交
查看stash
保存变更到stash
| 1 | git stash push -m 'comment it' | 
查看stash版本
| 1 | git stash list | 
查看stash某个版本的内容
| 1 | git stash show -p stash@{1} | 
提出某个版本
| 1 | git stash pop stash@{0} | 
也可使用git stash apply n 或者 git stash apply stash^{/comment it},区别是pop会删除stash中的内容,而apply则不会。
切换到tag
git checkout -b branch_name tag_name
版本回滚
在解决冲突的过程中,或者其它原因可能需要将版本进行回滚,回滚到之前的某个版本,操作如下:
| 1 | git log # 查看提交提交历史记录 | 
如果要回滚的版本和当前版本隔的版本较多,可以使用git reset --hard HEAD~num,其中num是回滚的版本与最新版本的差值+1
如果此时又想回到未来的某个版本,则可以从之前的记录中找到未来版本的对应的commit id,使用git reset --hard xxx,版本号没必要写全,前几位就可以了,Git会自动去找,但反正都是复制,为什么不复制全呢。
查看距离上次发版本之后的change log
| 1 | git log --oneline --decorate --color | 
打tag
| 1 | git tag -a v1.1.0-rc11 -m 4b73fec0 | 
.gitignore 文件的配置
我用intellij开发,intellij的项目中会有个.idea文件夹,其内的内容和其他人的内容不一样,还有一些配置文件会不一样,所以就想把这些给忽略掉。
在项目中创建.gitignore,其内的内容如下
| 1 | /target/ | 
.gitignore配置完之后,向git仓库push代码时,.idea中的文件可能会发生冲突,则将本地.idea的内容从git缓存中删除,
| 1 | git rm --cached <文件名> 删除文件的缓存 | 
然后将代码进行提交
fork分支同步源分支
- Clone your fork:
 git clone git@github.com:YOUR-USERNAME/YOUR-FORKED-REPO.git
- Add remote from original repository in your forked repository:
 cd into/cloned/fork-repo
 git remote add upstream git://github.com/ORIGINAL-DEV-USERNAME/REPO-YOU-FORKED-FROM.git
 git fetch upstream
- Updating your fork from original repo to keep up with their changes:
 git pull upstream master
error 解决
出现Non-fast-forward时,可以强制提交git push -f
- Pull is not possible because you have unmerged files.(或者在进行其它操作时,提示xx have unmerged files.)
 应该是因为local文件冲突了,解决方法有两种:
- pull会使用git merge导致冲突,需要将冲突的文件resolve掉,然后执行git add -u, 最后git commit之后才能成功pull。
- 如果想放弃本地的文件修改,可以使用git reset --hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull。
clone hadoop
git clone git@github.com:hunshenshi/hadoop.git
git remote add upstream git@github.com:apache/hadoop.git
如果要提交patch,先同步原Hadoop仓库代码
| 1 | git checkout trunk | 
然后创建分支进行提交
| 1 | git checkout -b HDFS-14361 | 
最后在github上提交PR(PR的时候注意看下当前分支是否为trunk分支)
如果出现“This branch is X commits ahead”
在trunk分支拉取原分支代码,然后进行强制提交
| 1 | git pull upstream trunk | 

