git常用命令
*查看用户名和邮箱git config user.name
git 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 |