git-in-real-world.md 2.0 KB


title: "Git in Real World" date: 2021-06-08T15:45:30+07:00 draft: false

tags: []

拉取所有远程 tags

$git fetch --all --tags

基于某个 tag 新建 branch

$git checkout tags/<tag_name> -b <new_branch_name>

Ignore ^M as a newline when execute 'git diff'

$git config --global core.autocrlf true

查看指定文件修改历史

$git log --pretty=oneline [--oneline] <filename>

查看单次提交详情

$git show <commit>

撤销 git add

$git reset HEAD 
$git reset HEAD <filename>
$git reset HEAD <path>
$git rm --cached <filename>

撤销 commit (尚未 push)

$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

参见

rebase 远程分支

假设情景如下: 有一些本地分支,其中 master 是用来同步的主分支 对应自己有一个远程仓库 origin, origin 是 clone 自另一个仓库 假设地址在 https://github.com/a/b.git. 现在需要拉取原始仓库的更新

$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

$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

# cancel the merge
$git reset --hard HEAD
# merge by theirs
$git pull --strategy=theirs <remote>
or
$git checkout <branchA>
$git merge -X theirs <branchB>