乐趣区

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’.

退出移动版