- 场景:
stash pop
后,发现不应该pop,
解决方法:git reset --hard HEAD
refer: discard-git-stash-pop
- 场景:将之前上传到gitlab中的文件加到 .gitignore文件中;如将.env.production 等 env 忽略掉,不要上传到库中
解决方法: 需要先将文件使用 git rm 删除一下,所以需要先备份一下,或者删除后从库中以前的版本再copy到本地
git rm env.local --cached
ignore文件就不写了,refer: stackoverflow
- 清除目录
场景:项目被重写,目录变动非常。从新版本切回旧版查看代码时,会将旧版的目录下载,再切回新版后,旧的目录依然还在。怎么清除旧的文件或目录呢?
方法: 使用 git clean
git clean -n // 演习,告诉你会清哪些文件,不会真正删除
git clean -f //删除当前目录下所有没有track过的文件. 他不会删除.gitignore文件里面指定的文件夹和文件, 不管这些文件有没有被track过
git clean -f <path> // 删除指定路径下的没有被track过的文件
git clean -df // 删除当前目录下没有被track过的文件和文件夹
参考 git clean的用法
-
文件(夹)名称大小写
这个在 mac 下使用git mv myfile MyFile
类似git rm xxfile
但在 windows 下经常用有权限的问题,所以 windows 下麻烦些. 套路;
a. 把A目录备份为B
b. 删除A目录
c. git add 那些deleted的文件
d. 将目录B改名为你要的名字X
e. git add X
执行完上边再 git status 能看到 renamed xxx -> XXX
文件同目录操作一样。 -
error: fatal: Unable to create /.git/index.lock': File exists
处理:rm -f ./.git/index.lock
refer: link -
临时保存后切到别的分支 refer,
保存:git stash save “修改的信息"
取出:
git stash list
git stash apply stash@{0}
-
git add 后,有某个文件不需要提交
git reset head
-
本地有修改,但现在要拉个全新的分支, 另外本地修改没啥影响,想全部丢弃
git reset --hard
orgit checkout .
-
修改本地与远程分支名
refer: How To Rename a Local and Remote Git Branch
# 1. Start by switching to the local branch which you want to rename:
git checkout <old_name>
# 2. Rename the local branch by typing:
git branch -m <new_name>
# 3. Push the <new_name> local branch and reset the upstream branch:
git push origin -u <new_name>
# 4. Delete the <old_name> remote branch:
git push origin --delete <old_name>
- stash clear 后的恢复
refer stackoverflow
# 1. 用下面命令先找出 commit 列表
git fsck --unreachable | grep commit | cut -d ' ' -f3 | xargs git log --merges --no-walk --grep=WIP
# 2. 找到你的 commit id 后,如下操作(可能你是没有commit, 但stash会当成一个commit)
git stash apply <commit id>
- stash 没有 track 的文件
refer: stackoverflow
git stash -u
- 找出当前代码中所有修改的文件
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id
# 需要将修改后的文件打包用这个
git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | tar -czf file.tgz -T -
refer: stackoverflow
执行后展示如下:
- cherry-pick
帮同事合代码时,发现他的分支少了之前的 develop 分支的一个 commit,此时可以将这个 commit 使用 cherry-pick 再合到他的分支就可以了
# 1. 使用git log 找到刚漏了的commit
git log
# 2.
git cherry-pick <commitHash>
# 3. 如果有冲突,解决冲突后执行
git add conflict_file
git cherry-pick --continue
git commit -c db617f5
git push origin dev-branch-name
refer: git-cherry-pick, Using_Git_Cherry_Pick#Resolve_conflicts
网友评论