Git 工具总结

配置SSH公钥

  使用 SSH 公钥可让电脑和码云通信(我仓库放在码云)的时候使用安全链接(Git 的Remote要使用 SSH 地址)。详见java

  1. 码云--->设置--->安全设置--->ssh公钥,先写个公钥的标题
  2. ssh-keygen -t rsa -C 'your email'  ,生成 ssh key
  3. ~/.ssh/id_rsa.pub ,获取到你的 public key
  4. 复制生成的 public key 添加到步骤 1 仓库中
  5. ssh -T git@gitee.com ,首次使用须要确认并添加主机到本机 SSH 可信列表。若返回 Hi XXX! You've successfully authenticated ,则证实添加成功。

Git配置多个SSH-Key 

  当有多个 git 帐号时,好比:git

  • 一个 gitee,用于公司内部的工做开发;
  • 一个 github,用于本身进行一些开发活动;

  详见github

初操做---设置用户名

  1. git config --global user.name "any name"  //设置全局project的用户名
  2. git config --global user.email "any email"  //设置全局project的邮箱
  3. git config --global --list   //查看当前用户的全局配置   用户名和邮箱
  4. 在VS Code中每次更新代码都会要输入帐号密码,方便起见,能够配置一下让 git 记住密码帐号。
  5. git config --global credential.helper store 

创建远程仓库连接

  1. 若是是从服务器 clone 下来的代码,会自动配置一个叫 origin 的远程仓库连接
  2. git remote -v  // 查看配置的远程仓库连接
  3. git remote add <远程仓库名> <远程仓库url>    //添加远程库连接
  4. git remote rm <远程仓库名>   //移除远程仓库
  5. git remote rename <oldname> <new name> //远程仓库重命名

提交代码过程

  1. 提交以前,须要 pull 一下,而后处理冲突
  2. git add -A   //添加全部文件,也能够只提交更改的文件 git add .
  3. git add .   //添加更改的文件
  4. git commit -m "描述代码信息"
  5. git push -u <远程库的名称> <远程库的分支>  // -u 表示指定<当前远程库> 为默认远程仓库,之后就直接push,不用带参数
  6. 若是你肯定远程仓库的分支上那些代码都不须要了,那么直接 push 后面加一个 -f ,强行让本地分支覆盖远程分支
  7. git push <远程仓库名> <远程库的分支> -f 

提交代码出现冲突

  1. git push 会出问题,应该先pull 一下,可是 pull 的时候又可能会出现分支冲突,
  2. 这时可能因为版本问题会报错,可能遇到 refusing to merge unrelated histories 这个提示是由于两个仓库不一样,发现 refusing to merge unrelated histories,没法 pull。
  3. 要把两个不一样的项目合并,git 须要添加一句代码 ,这句代码是在 git 2.9.2 版本发生的,最新的版本须要添加 --allow-unrelated-histories。查看git 版本,git --version
  4. 假如咱们的远程仓库是 origin,分支是 master,那么咱们须要这样写  git pull origin master --allow-unrelated-histories
  5. 而后再  git push -u <远程库的名称> <远程库的分支>

拉取代码出现冲突

  1. git pull 时本地文件和远程服务器文件冲突,出错信息以下:
  2. error: Your local changes to 'contextTempl.java' would be overwritten by merge.  Aborting.
  3. Please, commit your changes or stash them before you can merge.
  4. 解释:这个意思是说更新下来的内容和本地修改的内容有冲突,先提交你的改变或者先将本地修改暂时存储起来。
  5. 在 VS Code 中,错误提示是:在签出前 请清理存储库工做树
  6. 在这种状况下,您能够将更改隐藏起来,而后执行git pull,而后解压缩;
  7. git stash  //先将本地修改存储起来
  8. git pull  //拉取远程
  9. git stash pop //还原暂存内容

代码克隆全部分支

  git clone 只能 clone 远程库的 master 分支,没法 clone 全部分支,解决方法去下:安全

  1. git clone http://xxx.xxx.com/project/.git ,这样在git_work目录下获得一个project子目录
  2. cd project
  3. git branch -a,列出全部分支名称以下:remotes/origin/dev     remotes/origin/release
  4. git checkout -b dev origin/dev ,做用是 checkout 远程的 dev 分支,在本地起名为 dev 分支,并切换到本地的 dev 分支
  5. git checkout -b release origin/release,做用参见上一步解释
  6. git checkout dev,切换回 dev 分支,并开始开发。

分支操做

  查看分支:git branch
ruby

  建立分支:git branch <name>
服务器

  切换分支:git checkout <name>
ssh

  建立+切换分支:git checkout -b <name>
fetch

  合并某分支到当前分支:git merge <name>
url

  删除分支:git branch -d <name>spa

指令简写

  -d    --delete:删除

  -D   --delete --force的快捷键

  -f     --force:强制

  -m   --move:移动或重命名

  -M   --move --force的快捷键

  -r     --remote:远程

  -a     --all:全部

撤销与恢复

  1. 若是误删了某文件,须要 git status 先看下工做区是否 commit 过,若是没有 commit ,能够看到删除的文件名及路径,是红色的
  2. 直接从工做区拿删除的文件 git checkout -- <path + file>
  3. 若是已经commit 了,那么git status 看到的删除的文件及路径是绿色的,这时checkout 已经没用了
  4. 能够把暂存区的修改撤销掉(unstage),git reset HEAD <path + file>,从新放回工做区,而后 git checkout -- <path + file> 取回

版本回退

  远程分支回退有三种方法

  1. 本身的分支回滚直接用 reset
  2. 公共分支回滚用 revert
  3. 错的太远了直接将代码所有删掉,用正确代码替代

  本地分支版本回退

  1. 先找到要回退的版本的 commit id ,git reflog 
  2. 能够根据commit id ,查看先前版本的信息,git log <commit id>  或者 git show <commit id>,退出git log 状态,英文状态下按q 
  3. 回退版本 git reset --hard <commit id> 

  本身的远程分支版本退回

  若是你的错误提交已经推送到本身的远程分支了,那么就须要回滚远程分支了。

  1. git reflog
  2. git reset --hard <commit id>
  3. 而后强制推送到远程分支,git push -f
  4. 本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,不然没法推送到远程分支

  公共远程分支回退

  回滚公共远程分支和回滚本身的远程分支是有区别的,若是你回退公共远程分支,把别人的提交给丢掉了怎么办?

git fetch 和 git pull 的区别

  1. git fetch <远程主机名> <分支名>;
  2. 最多见的命令如取回 origin 主机的 master 分支;
  3. git fetch origin master ,从远程主机的master分支拉取最新内容;
  4. git merge FETCH_HEAD , 将拉取下来的最新内容合并到当前所在的分支中;
  5. git pull <远程主机名> <远程分支名>:<本地分支名>;
  6. git pull origin master , 若是远程分支是与当前分支合并,则冒号后面的部分能够省略;
相关文章
相关标签/搜索