Git-命令使用笔记

Git工作流程

  1. 克隆仓库,创建本地分支

    git clone [仓库地址]
    git branch test # 创建test分支
    git branch -a # 查看所有分支信息
  2. 创建并检出到该分支

    git checkout -b 本地分支名
  3. 查看仓库状态

    git status

    查看尚未暂存的文件更新了哪些部分(查看当前没有add 的内容修改)

    git diff

    查看已经add 但还没有commit 的改动

    git diff --cached
  4. 提交改动

    git add .
    git commit -m"描述改动内容"

    然后再检查提交情况

    git log [filename] #可以看到fileName相关的commit记录
    git log -p [filename] #可以显示每次提交的diff
    git show commit-id [filename] #只看某次提交中的某个文件变化,可以直接加上fileName
  5. 推到远端

    // 将当前 loca_name 分支 push 到远端,命名为 new_name
    $ git push <远程主机名> <本地分支名>:<远程分支名>
  6. 去gitlab检查构建是否成功,然后提PR ;并删除本地分支和远端分支

查看分支信息

  • 查看当前处在哪个分支(所有本地分支)

    $ git branch
  • 查看所有分支(包括远程和本地)

    $ git branch -a
  • 查看所有远程(remote)的分支

    $ git branch -r
  • 查看所有分支的最后一个提交(commit)

    $ git branch -va
  • 查看远程分支的最后一个提交(commit)

    $ git branch -vr

新建分支

  • 从当前分支新建一个分支,但依然停留在当前分支 (常用于:对当前分支做个备份)

    $ git branch [branch-name]
  • 从指定远程分支,拉一个本地分支,并切换到该分支

    // 常用于:从远端 develop 拉一个 本地 feature/xxx 分支
    $ git checkout -b newBrach origin/master

删除分支

  • 当我们删除一个合并(merge)后的分支可以用git branch命令带参数-d
$ git branch -d hotfix
Deleted branch hotfix (was 3a0874c).
  • 如果分支已经有了新的提交且没有被合并(merge),那么将被提示错误信息,如果仍旧要删除这样的分支,你需要使用参数-D
$ git branch -D topic
Deleted branch topic (was 50590b4).

远程操作

- git clone
- git remote
- git fetch
- git pull
- git push

通过git rebase修改commit message

  1. 首先将远端你需要修改的分支拉倒本地,如果你的本地已经不存在这个分支了,执行命令:

    git checkout -b 本地分支名 远端分支名
  2. 首先通过git log查看日志 然后找到需要修改message的那个commit的前1个commit id,比如id为 c13c5f309deda4b34082811c4626b7ebbe790f9a, 执行下面命令:

    git rebase -i c13c5f309deda4b34082811c4626b7ebbe790f9a

    之后进入到下面,会提示出很多不同命令:

    image

  3. 然后进入编辑模式,将右上角的pick改为reword ,退出编辑模式,保存之后h会来到下面界面(如下图),然后就可以修改你的commit message了

    image

  4. 保存退出后再在执行git log进行检查一遍,没有问题之后执行git push -f,这样就修改成功了。

other: git config -l # Git config命令查看配置文件

解决冲突

从远程仓库里拉取一条本地不存在的分支:

git checkout -b 本地分支名 origin/远程分支名
git rebase origin/develop

解决冲突完成之后

git rebase --continue

如果报错:You must edit all merge conflicts and then mark them as resolved using git add 执行

git add .

修改 message

git commit --amend

放弃本地修改

git checkout . #本地所有修改的。没有的提交的,都返回到原来的状态
git stash #把所有没有提交的修改暂存到stash里面。可用git stash pop回复。
git reset --hard HASH #返回到某个节点,不保留修改。
git reset --soft HASH #返回到某个节点。保留修改

GitHub 的 Pull Request 是指什么意思?

  • 当你想更正别人仓库里的错误时,要走一个流程:
    1. 先 fork 别人的仓库,相当于拷贝一份,相信我,不会有人直接让你改修原仓库的
    2. clone 到本地分支,做一些 bug fix
    3. 发起 pull request 给原仓库,让他看到你修改的 bug
    4. 原仓库 review 这个 bug,如果是正确的话,就会 merge 到他自己的项目中。至此,整个 pull request 的过程就结束了。

问题整理

  1. error: unpack failed: unpack-objects abnormal exit

    原因是git库权限的问题,解决方案:在git库目录下执行

    sudo chown -R
  2. 获取git线上仓库代码报这个错误:

    zhangzhi@moke:~/code/ktsg-api$ git pull
    You have not concluded your merge (MERGE_HEAD exists).
    Please, commit your changes before you can merge.

    错误可能是因为在你以前pull下来的代码没有自动合并导致的.

    有2个解决办法:

    1.保留你本地的修改,合并后记得一定要提交这个本地的合并然后在获取线上仓库git pull

    git merge --abort
    git reset --merge

    2.down下线上代码版本,抛弃本地的修改

    不建议这样做,但是如果你本地修改不大,或者自己有一份备份留存,可以直接用线上最新版本覆盖到本地

    git fetch --all
    git reset --hard origin/master
    git fetch

参考资料:

热评文章