*查看用户名和邮箱
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 devgit 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
2
git add -u
git reset -- main/dontcheckmein.txt

开发本地分支同步到远程dev

1
2
3
4
5
6
7
8
9
10
# 先将远程dev同步到本地开发分支 test
git pull origin dev
# 开发结束之后将本地分支提交到远程test分支
git add --all
git commit
git push origin test
# 将远程test分支合并到dev分支
git checkout dev
git merge test
git push origin dev

删除分支

git branch -d localBranchName

本地与远程代码冲突

当你pull远程代码时,可能发生冲突,报错内容如下:

1
2
3
4
error: Your local changes to the following files would be overwritten by merge:  
...
Please, commit your changes or stash them before you can merge.
Aborting

提示使用stash命令,具体操作如下:

1
2
3
4
5
6
7
8
git stash  # 备份当前的工作区的内容到git栈中
git pull # 拉取git仓库中最新的代码
git stash pop # 将你保存在git栈中的代码与从git仓库中拉取的代码进行merge
git diff -w filePath # 用diff查看哪些文件进行merge,去相应的文件中解决冲突
# 进入冲突的文件,进行代码修改
# 修改结束之后,将当前的代码push到git仓库
# 将stash中的备份清空
git stash clear

push时发现远程仓库已更新

执行git push报错,内容如下:

1
2
3
4
5
6
 ! [rejected]        main -> main (fetch first)
error: 无法推送一些引用到 'github.com:xxx/xxx.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

执行git pull拉取最新代码,提示

1
2
3
4
5
6
7
8
9
10
11
12
   3e24ca6..cdb884c  main       -> origin/main
提示:您有偏离的分支,需要指定如何调和它们。您可以在执行下一次
提示:pull 操作之前执行下面一条命令来抑制本消息:
提示:
提示: git config pull.rebase false # 合并
提示: git config pull.rebase true # 变基
提示: git config pull.ff only # 仅快进
提示:
提示:您可以将 "git config" 替换为 "git config --global" 以便为所有仓库设置
提示:缺省的配置项。您也可以在每次执行 pull 命令时添加 --rebase、--no-rebase,
提示:或者 --ff-only 参数覆盖缺省设置。
fatal: 需要指定如何调和偏离的分支。

执行git pull --no-rebase

1
2
3
4
5
Merge made by the 'ort' strategy.
Makefile | 2 +-
dockerfile | 1 +
frontend | 2 +-
3 files changed, 3 insertions(+), 2 deletions(-)

查看是否存在冲突,如果不存在再次执行git push进行提交

查看stash

保存变更到stash

1
git stash push -m 'comment it'

查看stash版本

1
2
3
git stash list
stash@{0}: WIP on main: 912ab09 xz
stash@{1}: WIP on main: 912ab09 xx

查看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
2
3
4
5
6
7
8
git log  # 查看提交提交历史记录    
# (此时就可以看出每次push代码时都要写备注,要不不知道回滚到哪个版本)

# 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数
git log --pretty=oneline

# 回滚版本
git reset --hard HEAD^ # or git reset --hard HEAD~1

如果要回滚的版本和当前版本隔的版本较多,可以使用git reset --hard HEAD~num,其中num是回滚的版本与最新版本的差值+1

如果此时又想回到未来的某个版本,则可以从之前的记录中找到未来版本的对应的commit id,使用git reset --hard xxx,版本号没必要写全,前几位就可以了,Git会自动去找,但反正都是复制,为什么不复制全呢。

查看距离上次发版本之后的change log

1
git log --oneline --decorate --color

打tag

1
2
git tag -a v1.1.0-rc11 -m 4b73fec0
git push origin v1.1.0-rc11

.gitignore 文件的配置

我用intellij开发,intellij的项目中会有个.idea文件夹,其内的内容和其他人的内容不一样,还有一些配置文件会不一样,所以就想把这些给忽略掉。

在项目中创建.gitignore,其内的内容如下

1
2
3
4
5
6
7
8
9
10
11
12
/target/

# ignore .idea
.idea/*

# ignore .gitignore
# 如果.gitignore文件没有被忽略的话,在git命令行中执行
# git update-index --assume-unchanged (PATH/FILE)在PATH/FILE处输入要忽略的文件
/.gitignore

# 本地忽略文件
src/main/resources/config/jdbc.properties

.gitignore配置完之后,向git仓库push代码时,.idea中的文件可能会发生冲突,则将本地.idea的内容从git缓存中删除,

1
2
git rm --cached <文件名> 删除文件的缓存
git rm --cached -r <目录名> 删除目录下的所有文件的缓存

然后将代码进行提交

fork分支同步源分支

  1. Clone your fork:
    git clone git@github.com:YOUR-USERNAME/YOUR-FORKED-REPO.git
  2. 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
  3. 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文件冲突了,解决方法有两种:
  1. pull会使用git merge导致冲突,需要将冲突的文件resolve掉,然后执行git add -u, 最后git commit之后才能成功pull。
  2. 如果想放弃本地的文件修改,可以使用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
2
3
git checkout trunk
git pull upstream trunk
git push origin trunk # 本地和仓库同步代码

然后创建分支进行提交

1
2
3
4
git checkout -b HDFS-14361
git add hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java
git commit -m 'HDFS-14361:SNN will always upload fsimage'
git push origin HDFS-14361

最后在github上提交PR(PR的时候注意看下当前分支是否为trunk分支

如果出现“This branch is X commits ahead”
在trunk分支拉取原分支代码,然后进行强制提交

1
2
git pull upstream trunk
git push --force-with-lease