git使用常见问题

1、.gitignore部分或全部不起作用
清除本地库的缓存: git rm -r --cached .
将本地代码重新加入: git add .
并让.gitignore文件夹生效,读取我配置的过滤规则: git commit -m ‘update .gitignore’

2、查看历史文件内容
当我们使用 git log 命令找到了某次提交,并且想看看这次提交时文件的完整内容。
这时,我们需要使用 git show 命令:
git show xxx:filename
也许此时你并不是看看就算了,你想要使用这个版本的文件更新工作区中的文件。
直接从 git show 命令的输出中拷贝内容是个不错的选择。
但也可以通过组合使用不同的命令来实现:
git checkout <commit> --filename
git reset filename
此时只有工作区被更新了(你也可以把他当做是一次回滚操作)。



3、比较历史中的文件版本
我们经常使用版本控制工具来对比提交历史中的两个文件,下面看看用 git 怎么做:
git diff xxxx1 xxxx2 -- filename

4、git 远程仓库文件覆盖本地文件
git fetch --all
git reset --hard origin/master //例如 dev/20190926分支: git reset --hard origin/dev/20190926
git pull

5、git clone --depth=1
depth用于指定克隆深度,为1即表示只克隆最近一次commit.

6、修改上一条提交记录
git commit -m 'title' -m 'message:xxx'
提交之后,发现提交的标题或说明有问题,则可以通过
git commit --amend -m 'title' -m 'message:xxx'重新提交。
--amend重新提交是在日志看不到操作记录的,只是修补上一次操作记录

7、修改多条commit
假设要修改的commit是倒数第3、4两条,使用下述命令:
a) rebase指出HEAD
git rebase -i HEAD~4
弹出vi编辑窗口后,把对应行的pick改为edit,amend命令只会修改标识为edit的commit信息。
b) 然后 :wq保存退出
c) 执行
git commit --amend
d) 修改commit信息
弹出vi编辑窗口后,修改倒数第4条的提交信息。
e) 修改完成然后 :wq保存退出
f) 执行
git rebase --continue
进入下一个commit修改:
g) 执行
git commit --amend
弹出vi编辑窗口后,继续编辑倒数第3条。
h) 修改完成然后 :wq保存退出
i) 执行
git rebase --continue
j) 如果已经push过代码,执行git push -f强制推送到服务端;
k) 如果尚未push成功,执行git push推送到远程私仓;

8、git 提示 detached head 解决办法
出现的原因

  • 从远程库clone下来一个远程的repository
  • clone下来之后,git自动在本地建立了一个本地分支master,并自动与远程库master关联
  • 现在在操作checkout其他分支名(a)

    • 因为本地的工作区目前是刚刚clone的master分支的代码并且与远程关联,但是本机上没有本地分支与远程分支a关联,所以checkout一下就会出现detached head的状态(直接指向了commit id,因为git是离线版本控制,因为此checkout是远程的不是本地的,所以git只能给你一个commit id让你进行操作)

解决办法

  • checkout 的时候如果本地没有与之关联,则在命令加上参数在本地新建分支并与之对应即可
  • git checkout -b new_branch_name

或者 git checkout --track new_branch_name // Branch 'new_branch_name' set up to track remote branch 'new_branch_name' from 'origin'.

阅读 112

推荐阅读