Git 速查

参考

1. 廖雪峰Git教程

2. 阮一峰的网络日志《常用Git命令清单》

首先,我按照廖雪峰的Git教程学习,将教程中的各种命令实践了一遍,并记录了下来,但比较杂乱;然后发现了阮一峰总结的清单,分类清楚,也很实用,借鉴一下,我也按照他的分类将我学习的整理一份,也将各个命令亲手再打一遍再熟悉一下,大家可以直接看他的,比较全。


Git工作流程

(图片摘自阮一峰的网络日志《常用Git命令清单》


相关概念

名词含义
Workspace工作区
Stage/index暂存区
Repository本地仓库
Remote远程仓库
名词含义
add1.跟踪文件
2.将已跟踪文件更新保存到暂存区(只保存当前版本,继续修改后,需要再次add才能把最新修改保存到暂存区)
3.合并时将冲突文件标记为已解决状态
commit提交暂存区文件到本地仓库
push推送本地仓库更新到远程仓库
fetch获取远程仓库最新代码到本地仓库,不会自动merge
clone克隆远程仓库代码副本到本地仓库
pull拉取远程仓库代码更新到本地仓库,自动merge
checkcout切换分支、丢弃文件更新

常用命令

1. 新建

命令功能
git init初始化目录为git管理的仓库
git init dirName创建目录,并初始化为git管理的仓库
git clone remoteUrl根据远程仓库的地址SSH / HTTPS,将远程仓库克隆到本地,包括所有代码历史记录

2. 配置

命令功能
git config查看config相关命令
git config --list查看自己的git配置
git config [–global] [–local] user.name your name配置提交代码时的用户名,加上–global是配置全局的,所有仓库都能使用,在用户目录中生成配置文件.gitconfig;
不加或local,只在当前仓库可用,在.git中生成配置文件config
git config [–global] user.email your email配置用户邮箱
git config [–global] color.ui true/false配置命令行显示颜色
git config [–global] alias.alias name git command name配置别名, 例如git config --global alias.st status , 之后git st == git status 。
修改别名,可以直接通过命令重新设置覆盖;也可在配置文件中直接修改

3. 查看

命令功能
git status查看仓库当前状态,显示变更的文件
git log查看仓库提交历史记录,显示版本号、提交人,日期,修改内容
git log -2查看2次仓库提交历史记录
git log filePath查看某个文件的提交历史记录
git log --pretty=oneline查看仓库提交历史记录,一行显示版本号、修改内容
git log --stat显示commit历史,以及每次commit发生变更的文件
git log --graph查看合并分支图
git reflog能够记录几乎所有本地仓库的改变。
包括所有分支commit提交,已经删除(其实并未被实际删除)commit都会被记录。
总结:只要HEAD发生变化,就可以通过reflog查看到。
git diff显示工作区和暂存区的差异
git diff --cached显示暂存区和最新commit的差异
git diff HEAD显示工作区和最新commit的差异
git diff filePath同git diff , 只是查看具体file的差异
cat filePath查看文件内容

4. 增删

命令功能
git add file file添加文件到暂存区,可以添加多个。
如果手动删除文件,然后git add 和 git rm效果相同
git add -f file强制添加文件到暂存区(被忽略的文件)
git add dir dir添加目录到暂存区,包括子目录,可以添加多个
git add .添加所有文件到暂存区
git rm flie file从工作区删除文件,并将这次删除操作放入暂存区
git rm --cached file对某个文件取消跟踪,但不删除
git rm --f file对某个文件取消跟踪并删除
git mv oldFile newFile修改文件名,并放入暂存区

5. 提交

命令功能
git commit -m “log提交暂存区文件到仓库,添加提交日志
git commit file file -m “log提交暂存区指定文件到仓库,添加提交日志
git commit --amend -m “updateLog修改最近一次的提交日志

6. 分支

命令功能
git branch列出本地分支
git branch -r列出远程分支
git branch -a列出本地和远程所有分支
git branch branchName创建本地分支
git checkout branchName切换分支
git checkout -b branchName创建本地分支,并切换到该分支
git checkout -b branchName remoteBranchName创建本地分支,并切换到该分支,并与远程分支建立关联
git branch -d branchName删除本地分支
git branch -D branchName强制删除本地分支(未合并)
git merge branchName合并某分支到当前分支
git cherry-pick commitId将其他分支的commitId对应的提交,复制到当前分支,自动提交
git branch --set-upstream-to branchName origin/branchName本地分支和远程分支建立关联
git push --set-upstream remote remoteBranchName创建远程分支
git push --delete remote remoteBranchName删除远程分支

7. 标签

命令功能
git tag查看标签
git show tagName查看标签信息
git tag tagName\git tag tagName commitId根据最近一次提交新建本地标签\根据commitID新建本地标签
git tag -a tagName -m log可以指定标签信息
git tag -d tagName删除本地标签
git push remote tagName标签推送到远程仓库
git push remote --tags所有标签推送到远程仓库
git push remote :refs/tags/tagName删除远程仓库标签

8. 远程

命令功能
git remote查看连接的远程库
git remote -v查看所有远程库详细信息
git remote show remote查看某个远程库的信息
git remote removeremote删除和远程库的关联
git remote add customRemoteName git@github.com:githubUserName/repositoryName.git本地仓库和远程GitHub仓库建立关联
git remote add customRemoteName git@gitee.com:giteeUserName/repositoryName.git本地仓库和码云远程库建立关联
git pull remoteName branch拉取远程分支,与本地分支合并
git push remoteName branch推送当前分支到远程分支
git push -u remoteName branchName创建新的远程分支,推送当前分支文件到远程分支,并建立关联

9. 暂存

命令功能
git stash暂时将未提交的变化保存到堆栈,工作区恢复为干净的
git stash list查看有哪些保存的工作现场
git stash pop将最近一次stash从堆栈弹出,恢复到工作区。该次储藏相当于从堆栈移除
git stash apply stash@{xxx}将某个储藏的工作现场恢复到工作区,该次储藏不会被移除
git stash drop stash@{xxx}删除某个储藏记录
git stash clear清空所有储藏记录
git show stash@{1}查看某个stash内容

不消息误删了stash,怎么办?

删除后会有提示删除成功,其中会有对应的引用id,如下:

Dropped stash@{2} (4ee684a3c8624a81a12b686084703c464bfe6391)

如果找不到了,可以通过:git fsck –lost-found命令查找最近的删除操作,如

dangling commit 4ee684a3c8624a81a12b686084703c464bfe6391
dangling commit 6526a83302e9673311b73fa87d935bc7cf276c05
dangling commit ff27285e444add9c18bf1f2d8b6c24cd8d540bc6
dangling commit 3f3a8ca1e4d3c2c3a9a6e62391a0514aa7e5d668

我们只关注 commit 的,通过git show e106b0b9ba4220832435ca4be727d317fe43c722 去查看这个暂存的日志、时间、内容等,如果是我们要找的stash ,可以通过git stash apply e106b0b9ba4220832435ca4be727d317fe43c722 来恢复这个stash

10.撤销

命令功能
git reset --hard commit id版本穿越,直接指定版本号,注意:–hard 不会保留两个版本之间所有改动。
既然叫版本穿越,即不只是可以回退到以前的版本,回退之后,还可以根据版本号再穿越回回退之前的版本
git reset --soft HEAD^–soft 只是回退提交到暂存区,可以保留两个版本之间的改动。
HEAD表示当前分支的当前版本,HEAD^ 回退到上个版本,HEAD^^ 上上个版本,HEAD~100上一百个版本
git reset HEAD filePath将文件从暂存区撤回到工作区
git reset HEAD .同上, . 代表所有文件
git checkout – filePath丢弃工作区中该文件的改动, 恢复到最近一次add 或 commit 时的状态。–是两个-,且前后有空格 。
虽然不加–也可以,但加上更标准,而且不加–是另一个切换分支的命令
git checkout – .同上, . 代表所有文件

11. 其他

命令功能
ssh-keygen -t rsa -C “your email输入后一直回车,在用户目录.ssh中创建ssh key 。
id.rsa 是私钥 ,id_rsa.pub 是公钥,私钥保密公钥公开。
远程仓库设置了你的SSH公钥,才支持通过SSH协议传输代码
第一次连接需要确认,根据提示输入yes,回车即可

忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件模式。

创建:

  1. 本地仓库新建name.gitignore文件
  2. 这里可以找到自己需要的忽略文件,复制到自己的name.gitignore文件中,并另存为.gitignore,删除原先的name.gitignore文件
  3. 加入版本管理,上传到远程库

规则:

  1. 所有空行或者以 # 开头的行都会被 Git 忽略。
  2. 可以使用标准的 glob 模式匹配。
  3. 匹配模式可以以(/)开头防止递归。
  4. 匹配模式可以以(/)结尾指定目录。
  5. 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。 星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字)。 使用两个星号(*) 表示匹配任意中间目录,比如 a/**/z 可以匹配 a/z , a/b/z 或 a/b/c/z 等。

我们再看一个 .gitignore 文件的例子:

# no .a files
*.a

# but do track lib.a, even though you're ignoring .a files above
!lib.a

# only ignore the TODO file in the current directory, not subdir/TODO
/TODO

# ignore all files in the build/ directory
build/

# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt

# ignore all .pdf files in the doc/ directory
doc/**/*.pdf

常用套路

1. 提交代码

  1. git status 查看本地更新
  2. git stash 暂存工作现场
  3. git pull --rebase 拉取最新代码
  4. git stash pop 恢复工作现场,有冲突解决冲突
  5. git commit 提交代码到本地仓库,添加日志
  6. git push 推送本地仓库代码到远程仓库

这是我在AS中直接使用自带的git工具一般操作方法,应该是比全用命令行少一步git add , 因为创建新文件时As会提示是否跟踪文件,确认就算是git add 了.

这样提交代码会减少冲突,另外减少垃圾日志

2. 提交失败

 ! [remote rejected] **** -> ***** (change ×××× closed)

原因:push 成功,没有成功 merge 到远程分支,被废弃。可以通过As > vcs > git > push ,查看到提交的记录,正常merge后记录会清空掉。

解决:

  1. git log 查看提交记录
commit 1234       本次提交
commit 1235       merge失败记录 1
commit 1236       merge失败记录 2
commit 1237       merge成功记录
  1. git reset --soft 1237 回退到1237那个节点,也是撤销掉1235和1236两次提交,并且不会删除之间的代码改动
  2. git commit 重新提交本次需要提交的代码
  3. git push 推送到远程仓库

3. 本地和远程偏离

碰到了偏离,更新代码下来太多冲突,在自己修改的代码已经提交到一个分支的情况下,使用了以下方法:

  1. git fetch --all 获取该分支所有最新代码,不合并
  2. git reset --hard origin/xxxxx(远程分支名) 本地代码同步线上最新代码,即用线上代码覆盖本地代码

4. git修改密码之后,拉取代码报错remote: HTTP Basic: Access denied,fatal: Authentication failed for……

git config --system --unset credential.helper

git config --global credential.helper store

分别执行上面两条命令后,重新拉取就会让你重新输入用户名和密码,输入正确后拉取成功,后面就都可以了


暂时先记录到这里,暂时记录的都是自己尝试过的基础的命令,后面学习中,不断再更新吧

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值