|
|
@@ -0,0 +1,100 @@
|
|
|
+---
|
|
|
+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/<tag_name> -b <new_branch_name>
|
|
|
+```
|
|
|
+
|
|
|
+### Ignore ^M as a newline when execute 'git diff'
|
|
|
+
|
|
|
+```shell
|
|
|
+$git config --global core.autocrlf true
|
|
|
+```
|
|
|
+
|
|
|
+### 查看指定文件修改历史
|
|
|
+
|
|
|
+```shell
|
|
|
+$git log --pretty=oneline [--oneline] <filename>
|
|
|
+```
|
|
|
+
|
|
|
+### 查看单次提交详情
|
|
|
+
|
|
|
+```shell
|
|
|
+$git show <commit>
|
|
|
+```
|
|
|
+
|
|
|
+### 撤销 git add
|
|
|
+
|
|
|
+```shell
|
|
|
+$git reset HEAD
|
|
|
+$git reset HEAD <filename>
|
|
|
+$git reset HEAD <path>
|
|
|
+$git rm --cached <filename>
|
|
|
+```
|
|
|
+
|
|
|
+### 撤销 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 <folder> # 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 <remote>
|
|
|
+or
|
|
|
+$git checkout <branchA>
|
|
|
+$git merge -X theirs <branchB>
|
|
|
+```
|