Git学习笔记

遇见狂神说视频里截的图

结果示意图

2020-07-30_170946.PNG文件操作

2020-07-30_172632.PNG忽略文件
2020-07-30_180209.PNG

简介、诞生、安装等

 没有,自己查。关于安装,我没用官方的。我用的是cmder。它集成了Git。

配置

查看配置

1
git config -l
1
git config --system --list
1
git config --global --list
1
git config --local  --list

 从上面三条命令可以看出--list-l。system指安装目录下的gitconfig文件,global指用户目录(~)下的gitconfig文件,local指当前仓库的gitconfig文件。

配置

1
git config --global user.name "150811" # 名称 引号可加可不加
1
git config --global user.email [email protected] # 邮箱

 看了上上面的命令,可以自行对上面的命令进行改造。实在不想打命令,可以去对应文件修改。关于冒充,最好不要。

命令合集部分跳转

  1. 其他
  2. tag
  3. rebase
  4. pull和fetch
  5. push
  6. chrerry-pick
  7. stash
  8. merge合并和rebase
  9. [branch](# branch分支相关)
  10. remote
  11. rm
  12. checkout和resotre恢复相关
  13. reset和revert
  14. log

命令合集

1
git init

 这个命令可以初始化一个空仓库。也可以用下面的命令得到一个仓库。

1
git clone [url] [dir]

 如果不加路径,就会在当前路径生成一个仓库名的文件夹。后续需要进入这个文件夹。所以我一般会用.这路径。


1
2
git add .
git add [file]

git add这个命令作用很多。


1
2
3
4
5
git commit -m "消息" [file 不加则全部]
git commit //会进入编辑模式,用的编辑器取决于配置文件
git commit --amend //常常用来修改某个branch上最顶端的commit
git commit -c ORIG_HEAD //-c选项使得新提交的log message重用ORIG_HEAD指向的commit使用的log message,但允许用户编辑(查--amend得到)

 这个不多说,懂得都懂,不懂得,说了你也不明白,不如不说。你们也别来问我怎么了,利益牵扯太大,说了对你们也没什么好处,当不知道就行了,其余的我只能说这里面水很深,牵扯到很多大人物。详细资料你们自己找是很难找的,网上大部分已经删除干净了,所以我只能说懂得都懂,不懂得也没办法。


1
git status

 这个命令可以查看当前仓库的状态,会提示你用什么命令来解决问题。


1
git diff [file]

 这个命令可以看到文件有什么修改。当然这时可能看到乱码。自行解决。

1
2
3
git diff:是查看working tree与index的差别的。
git diff --cached:是查看index与repository的差别的。
git diff HEAD:是查看working tree和repository的差别的。其中:HEAD代表的是最近的一次commit的信息。

上述命令来自教程的评论区,我比较相信。git diff HEAD -- readme.txt中间确实有空格。


1
2
3
4
git log
git log --graph
git log --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit

 这个命令建议使用简写。不打命令就在文件里改。

1
2
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
llg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
1
git reflog

这个命令可以看每次的命令。对于我来说,可以方便回退到某个版本。


1
2
3
git reset --hard HEAD^ 
下面有git reset --soft HEAD^
默认是--mixed

这个命令可以回退到某一个版本。win上需要双倍^(父)。后面可以理解为指针。还有~

 对于使用--hard,我还是有些疑惑。我还是查阅过一点资料的。这种疑惑是一种知识不全的感觉。

reset好像有点危险。远程无效。

1
git revert HEAD 

 可以分享给别人。撤销提交,引入新提交,和提交前一样。


1
git checkout -- readme.txt

这个命令结合可以撤销修改到最近的commit or add(感觉有问题,是不是直接从暂存区恢复?)状态。理解起来很烦,所以我一般用switch

 修改了工作区,可以用上面的命令丢弃修改。改了工作区有add了,用git reset HEAD <file>,再使用上面的命令。

 较高的Git版本,会提示用restore

1
2
3
4
5
6
从暂存区恢复工作区,
git resotre --worktree readme.txt
从master恢复暂存区
git restore --staged readme.txt
从master同时恢复工作区和暂存区
git restore --source=HEAD --staged --worktree readme.txt

rm

1
2
3
4
5
git rm
git rm --cached
git rm -r
直觉告诉我应该有
git rm -rf

1
git remote add origin [仓库克隆或下载那的链接]

这个命令结合可以关联远程仓库。我是把origin理解为主机名的,配置文件看一看,大概就理解了。取消关联git remote rm origin(没试过)

1
2
git remote
git remote -v

 上面的命令用来查看远程库的信息。

1
2
3
4
git push -u origin master
追踪远程分支
还可以
git'checkout……

 第一次推送要用类似上面的命令。


1
2
3
git checkout -b dev
推荐使用
git switch -c dev

 上面的命令表示创建并切换分支。可以理解为下面两条命令。似乎还可以加上远程分支origin/namecommit_id

1
2
git branch dev
git checkout dev

 对于查看分支可以用下面的。

1
git branch

 删除分支可以用下面的。

1
2
git branch -d dev
-D 强行删除
1
git branch --set-upstream-to=origin/dev dev

 上面的命令是来链接本地分支与远程分支的。


合并,假设有两个分支,在生成另一个分支切出去后,主分支没动。当另一个分支有提交后,在主分支合并会直接前进。如果主分支也有提交,合并会形成一个新的提交。它有两个父结点的提交。

1
2
git merge dev
git merge --no-ff -m "merge with no-ff" dev
1
git rebase master 会把当前的复制到master。 可以跟两个,搬后面的

1
git stash

这个命令可以储藏当前工作区。

1
git stash list

 查看

1
2
git stash pop
git stash apply stash@{0}

 恢复


1
git cherry-pick 4c805e2

这个命令可以复制指定提交到当前HEAD,可以更多个commit_id,不过顺序又要求(如果没记错)。


1
2
git push [主机名] [本地分支]:[远程分支]
不带参数会和push.default有关。

这个命令不加本地分支会删除远程分支。


pull和fetch
1
2
3
git pull 等价git fetch 加 git merge
git pull --rebase
git pull [主机名] [远程分支]:[本地分支]
1
git fetch 本地master不会前进

1
2
3
git rebase 分支合并在前面
git rebase -i HEAD~4 提交历史是直线,还可以用前面的分支名。(游戏得出)
git rebase --interactive HEAD~4

如果不知道哈希值,可以用它的交互模式。可以调序、删除不要、合并提交(游戏)。


tag
1
2
3
4
5
6
7
8
9
git tag
git tag v1.0
git tag v0.9 f52c633
git tag -a v0.1 -m "version 0.1 released" 1094adb
git show <tagname>
git tag -d v0.1
git push origin v1.0
git push origin --tags
git push origin :refs/tags/v0.9

其他

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git checkout [commit_id/branch_name] 我是这么理解的。还可以加~、^
---
cat .git\HEAD 看HEAD的指向。
git symbolic-ref HEAD 如果HAED指向引用,用这个查看指向。
---
git branch -f master HEAD~3 ‘-f’容许我们将分支强制移动到指定位置。
git reset --soft HEAD^ //将branch的头指针向前移动一个commit,--soft选项使得index和workspace tree的内容保持移动之前不变(查--amend得到的)(前面有--hard的,因此可以反向理解)
---
git bisect
---
git describe <ref>
输出<tag>_<numCommits>_g<hash>
tag 表示的是离 ref 最近的标签, numCommits 是表示这个 ref 与 tag 相差有多少个提交记录, hash 表示的是你所给定的 ref 所表示的提交记录哈希值的前几位。
当 ref 提交记录上有某个标签时,则只输出标签名称