--- title: "Git in Real World" date: 2021-06-08T15:45:30+07:00 draft: false tags: [] --- ### 拉取所有远程 tags ```shell $git fetch --all --tags ``` ### 基于某个 tag 新建 branch ```shell $git checkout tags/ -b ``` ### Ignore ^M as a newline when execute 'git diff' ```shell $git config --global core.autocrlf true ``` ### 查看指定文件修改历史 ```shell $git log --pretty=oneline [--oneline] ``` ### 查看单次提交详情 ```shell $git show ``` ### 撤销 git add ```shell $git reset HEAD $git reset HEAD $git reset HEAD $git rm --cached ``` ### 撤销 commit (尚未 push) ```shell $git reset --soft HEAD^ # 如果撤销 2 次 commit $git reset --soft HEAD~2 # 其他参数 --mixed 为默认参数,不删除工作空间代码改动,撤销 commit,并撤销 add # $git reset --mixed HEAD~2 == $git reset HEAD~2 --soft 不删除工作空间代码改动,撤销 commit, 不撤销 add --hard 删除工作空间代码改动,撤销 commit,撤销 add ``` ### 删除若干 commit [参见](https://www.clock.co.uk/insight/deleting-a-git-commit) ### rebase 远程分支 假设情景如下: 有一些本地分支,其中 master 是用来同步的主分支 对应自己有一个远程仓库 origin, origin 是 clone 自另一个仓库 假设地址在 https://github.com/a/b.git. 现在需要拉取原始仓库的更新 ```shell $git remote add upstream https://github.com/a/b.git $git fetch upstream $git checkout master $git rebase upstream/master $git push -f origin master ``` ### remove untracked files ```shell $git clean -d -n # dry run $git clean -d -f # remove untracked files $git clean -d -i # interactive mode $git clean -d -f # remove untracked files in folder $git clean -d -f -x # ignore files included. ``` ### CONFILICTS when merge and resolving ```shell # cancel the merge $git reset --hard HEAD # merge by theirs $git pull --strategy=theirs or $git checkout $git merge -X theirs ```