结果示意图
文件操作
忽略文件
简介、诞生、安装等
没有,自己查。关于安装,我没用官方的。我用的是cmder。它集成了Git。
查看配置
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"
|
看了上上面的命令,可以自行对上面的命令进行改造。实在不想打命令,可以去对应文件修改。关于冒充,最好不要。
命令合集部分跳转
- 其他
- tag
- rebase
- pull和fetch
- push
- chrerry-pick
- stash
- merge合并和rebase
- [branch](# branch分支相关)
- remote
- rm
- checkout和resotre恢复相关
- reset和revert
- log
命令合集
这个命令可以初始化一个空仓库。也可以用下面的命令得到一个仓库。
如果不加路径,就会在当前路径生成一个仓库名的文件夹。后续需要进入这个文件夹。所以我一般会用.
这路径。
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 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 2 3
| git reset --hard HEAD^ 下面有git reset --soft HEAD^ 默认是--mixed
|
这个命令可以回退到某一个版本。win上需要双倍^
(父)。后面可以理解为指针。还有~。
对于使用--hard
,我还是有些疑惑。我还是查阅过一点资料的。这种疑惑是一种知识不全的感觉。
reset
好像有点危险。远程无效。
可以分享给别人。撤销提交,引入新提交,和提交前一样。
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/name
和commit_id
。
1 2
| git branch dev git checkout dev
|
对于查看分支可以用下面的。
删除分支可以用下面的。
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 2
| git stash pop git stash apply stash@{0}
|
恢复
这个命令可以复制指定提交到当前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 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 提交记录上有某个标签时,则只输出标签名称
|