GIT 学习笔记

来源:互联网 发布:如何编写一个软件 编辑:程序博客网 时间:2024/06/16 05:44

GIT

学习来自朱凯哥的小册子

git 日志方面命令

  • git log -p 查看每个commit提交的细节(-p -> –patch)
  • git log –stat 查看简要统计,统计出来的是哪些文件修改哪些几处 -> 方便查看在哪个commit中修改了哪个文件。
  • git show 查看当前的commit的提交内容细节(-p 是可以查看全部) ,也可以利用 git show “SHA-1(commit的sha-1值)” 查看具体的一个commit的具体细节,还可以利用 git show “SHA-1” “file name(文件名)” 查看具体的文件的修改详情

git 修改对比(diff)

  • git diff –staged(与 git diff –cache 命令作用相同)(显示暂存区和上一条提交之间的不同, 相当于输入 git commit之后的修改)
  • git diff (没有参数) 显示工作目录和暂存区之间的不同(相当于输入git add . 之后的提交)
  • git diff HEAD (显示工作目录和上一条提交之间的不同) (HEAD 可以换成其他commit,这样可以看到和其他commit的不同)

git rebase

  • 合并时,不会出现分叉的情况,merge会出现分叉
  • 如果要rebase master分支,则应该先切换到其他分支,然后 git rebase master 避免将master分支上原有的commit给干掉,造成push不成功
  • git rebase 目标基础点(比如master) 与merge 命令相反

git 提交错误修改

  • git commit –ament (修改上一次提交的内容) [比如: 上一次commit的内容有错误,那么直接把文件修改,然后 git add . 然后 git commit –ament 这样就会重新创建一个新的commit 来替换掉 上一次的commit,这样做的好处就是不用为了修改一点点错误就增加一个commit]

  • git rebase -i (-i -> –interactive) 交互式rebase, 用于修改非最新一次commit的内容,就是你发现错误的commit不是最新的一个,而是之前的commit,这个时候就需要用到这个东西了。

    • 首先 git rebase -i HEAD^^ [一个 ^ 表示一次commit, 这里两个 ^^ 表示对于当前HEAD 回退两次,比如git log 依次出现的顺序是1,2,3 那么 ^^ 之后,回到的是 3, 这里也可以用~来表示 比如回退两个 git rebase -i HEAD~2]
    • 然后回退之后会出现一个界面,这个界面会列出前面几次的commit, 这个commit的顺序是正序的,也就是最先提交的在最上面,最后提交的在最下面,找到你要修改的commit 然后将 pick改为edit,然后保存,退出(这个界面还有其他命令,都在下方列出)[如果不想要之前的某次commit,那么直接删掉那条记录,然后保存文件就好了]。
    • 最后,修改文件 然后 git add . git commit –amend git rebase –continue
    • 也可以使用 git rebase –onto 目标起点 目标终点 分支
  • 出错的代码已经push到远端了
    分两种情况

    • (1) push的内容在自己的分支上,那么你可以直接修改,然后重新推上去,如果你是删掉当前commit在推送的话,由于两边commit不一致,会让你先pull,不过这个时候你可以直接忽略它,强制推送

      git push origin branch1 -f  (-f 是 --force 的缩写,意为「忽略冲突,强制 push」。)
    • (2) 出错的内容已经合并到master了,这种情况下就不要删掉之前的commit了 ,老老实实,重新建立一个新的commit来提交吧

git reset 作用

  • git reset –hard branch //git reset命令除了可以撤销当前提交之外,还可以切换分之,reset就是把当前HEAD移动到其他branch或者commit上
  • hard参数:重置工作目录-> 当前工作目录的所有内容会被完全重置为和HEAD的新位置相同的内容,换句话说就是未提交的内容都被擦除了(不管是否放在了暂存区)。
  • soft参数: 保留工作目录和暂存区中的内容,把差异放入暂存区
  • 不加参数:默认使用–mixed (保留工作目录,并且清空暂存区),就是commit了的会被保留,放在暂存的被清空,变成没有暂存

git stash

暂存当前目录, git stash pop 把暂存的放回来

git reflog

找回刚刚删除的分支,利用git reflog找到最后一次删除分支的commit记录,然后 git checkout commit(SHA-1值) 然后 git checkout -b branch 就可以找回刚刚删除的branch,不过这个只适合刚删除不久的,因为没有用的commit会被git回收机制自动删掉。
git reflog branch 查看具体的branch的HEAD移动历史。

git ignore

git忽略文件 https://git-scm.com/docs/gitignore

git 其他

  • git tag
  • cherry-pick
  • git config
  • git flow