Git基本命令
Git 基本命令
zsh 简写
gco == git checkout
ga . == git add .
gcmsg "add log" == git commit -m “addlog”
git checkout -b feature-branch-name
// 切分支
新建并切换仓库
git init
git add .
git commit -m ‘first commit’
git remote add origin http/s://github.com/yourgithubID/
(git pull --rebase origin master)
git push -u origin master #将本地仓库push到远程仓库
diff操作
在git提交环节,存在三大部分:working tree
, index file
, commit
这三大部分中:
- working tree:就是你所工作在的目录,每当你在代码中进行了修改,working tree的状态就改变了。
- index file:是索引文件,它是连接working tree和commit的桥梁,每当我们使用git-add命令来登记后,index file的内容就改变了,此时index file就和working tree同步了。
- commit:是最后的阶段,只有commit了,我们的代码才真正进入了git仓库。我们使用git-commit就是将index file里的内容提交到commit中。
总结:
git diff //查看 working tree 与 index file 的差别的。
git diff --cached //查看 index file 与 commit 的差别的。
git diff HEAD // 查看working tree和commit的差别的。(HEAD代表的是最近的一次commit的信息)
//git diff 旧 新
git diff ea83556 a0553e3
git diff HEAD~1 HEAD
git diff HEAD~1
git merge 操作
https://blog.walterlv.com/post/git-merge-strategy.html#patience
git fatch
git fetch origin master //从远程主机的master分支拉取最新内容 (不加master就是全部库)
git merge FETCH_HEAD //将拉取下来的最新内容合并到当前所在的分支中
git 回滚操作
场景1:未 add
撤回修改
git checkout .
删除没有 git add 的文件
git clean -d fx
场景2:已经 commit,但是未 push 到远端
回退到上一个版本
git reset --hard HEAD~
git reset --hard HEAD~2 //具有破坏性
git reset --mixed HEAD~2 // 有所保留
更改 commit 内容(未 push)
git commit --amend
场景3:已经 push
git push -u origin master -f
场景4:想要把 cf2e245 嫁接到某个分支目录下:
git checkout feat/xxx
git cherry-pick cf2e245
git checkout 操作
* git checkout -- filename // 撤销 filename 上次修改操作
git branch 操作
- 拉取指定分支内容
- git clone -b dev
- git fetch origin dev
- git checkout -b dev origin/dev
- 删除本地分支
- git branch -D branchName
- 删除远端分支
- git push origin –delete branchName
- git push origin :branchName
- 查看本地和远程分支
- git branch -a
- 强制更新个人分支
- git reset –hard origin/develop
- git push origin yourbranch –force
git 删除文件
git 暂存
思想:
- 可以暂存到工作区,并恢复该分支到上一个commit后的状态。
- 可以再任意分支 pop 出来并继续更改。
git stash
git stash save "test-cmd-stash" // 给 stash 加 message
git stash pop // 第一个stash删除,并将对应修改应用到当前的工作目录
git stash apply // 不删除
git stash list // 查看缓存列表
git stash drop stash@{0} // 删除某stash
git stash pop stash@{1} // 恢复指定stash
git merge 和 git rebase
git pull
git pull = git fetch + git merge FETCH_HEAD
git pull --rebase = git fetch + git rebase FETCH_HEAD
merge 和 rebase
现在我们有这样的两个分支,test和master,提交如下:
D---E test
/
A---B---C---F--- master
在master执行git merge test,然后会得到如下结果:
D--------E
/ \
A---B---C---F---G--- test, master
在master执行git rebase test,然后得到如下结果:
A---B---D---E---C‘---F‘--- test, master
merge操作会生成一个新的节点,之前的提交分开显示。
而rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交。
多个 Git 切换
举例:gitlab 和 github 切换使用,配置步骤如下
生成多个密钥
- 先假设我有两个账号,一个是 github 上的,一个是公司 gitlab 上面的。首先为不同的账号生成不同的ssh-key
ssh-keygen -t rsa -f ~/.ssh/id_rsa_work -c xxx@gmail.com
然后根据提示连续回车即可在~/.ssh目录下得到id_rsa_work和id_rsa_work.pub两个文件,id_rsa_work.pub文件里存放的就是我们要使用的keyssh-keygen -t rsa -f ~/.ssh/id_rsa_github -c xxx@gmail.com
然后根据提示连续回车即可在~/.ssh目录下得到id_rsa_github和id_rsa_github.pub两个文件,id_rsa_gthub.pub文件里存放的就是我们要使用的key
- 把 id_rsa_xxx.pub 中的 key 添加到 github 或 gitlab 上,这一步在 github 或 gitlab 上都有帮助,不再赘述
添加密钥
- 默认 SSH 只会读取 id_rsa,所以为了让 SSH 识别新的私钥,需要将其添加到 SSH agent
ssh-add ~/.ssh/id_rsa_work
ssh-add ~/.ssh/id_rsa_github
新建 config 文件
- 新建 ~/.ssh/config,并写入以下内容,设定不同的git 服务器对应不同的key
config:
# gitlab
Host workgit
HostName workgit.cn
User git
IdentityFile ~/.ssh/id_rsa_work
# github
Host github
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
切换 Git 命令
- 根据 config 配置的
Host
切换 git
ssh -T workgit
ssh -T github
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!