Git常用命令

Git常用命令

  • 前阵子在字节跳动广告创意中心实习的时候,发现自己对Git不是很精通。因此写下这篇博客,作为一份备忘录,记录本人经常使用的Git命令操作。

  • git config

    • git config --global user.name "xx"
    • git config --global user.email "xxx@example.com"
    • git config -l 查看配置信息
  • git branch

    • git branch 查看所有本地分支
    • git branch -r 查看所有远程分支
    • git branch -a 查看本地分支+远程分支
    • git branch xx 创建新分支
    • git branch -d xx  删除分支
    • git branch -v 查看各个分支最后一个提交信息
    • git branch --track dev origin/dev是创建一个新分支,并关联,若本地已存在,则会报本地分支已存在的错误
    • git branch --set-upstream-to=origin/dev dev 如果本地分支已存在,那使用--set-upstream-to来代替
    • git branch -u origin/xxx 设置当前分支跟踪远程分支origin/xxx
    • git branch -vv 查看本地分支和远程分支的跟踪关系
  • git remote

    • git 添加新的远程仓库,删除掉现在的
    • git remote -v 列出远程仓库的详细信息
    • git remote rm origin 删除远程仓库
    • git remote add origin(可修改) git@github.com:xxx/xxx.git 将本地仓库与远程仓库建立连接
    • git remote set-head origin branch_name 切换HEAD分支
  • git checkout

    • git checkout xx 切换分支
    • git checkout -b dev(本地分支名) origin/dev(远程分支名)达到关联效果
    • git checkout --
      • 放弃工作区修改,从版本库中拉取还原。
  • git push

    • git push <远程主机名> <本地分支名> :<远程分支名> 将本地版本库的分支推送到远程服务器上对应的分支
    • git push origin master:refs/for/master 将本地的master分支推送到远程主机origin上的对应master分支
    • git push origin master 远程分支被省略,则表示将本地分支推送到与之存在追踪关系的远程分支(如果未关联,则是同名分支)
    • git push --force origin master 一般使用git push的时候,本地需要先与远端保持一致,使用--force可以强制推送(我一般用于 git commit --amend 之后)
  • git pull

    • 尽量用git fetch 和 git merge 代替git pull
    • git pull origin master 等价于
      • git fetch origin master
      • git merge origin/master
  • git fetch

    • 相当于远程获取最新版本到本地,不自动merge

    • git fetch origin branch_name

      • 该操作不会在本地创建新的branch。设定当前分支的FETCH_HEAD' 为远程服务器的branch_name分支。
    • git fetch origin branch1:branch2

      • 使用远程branch1分支在本地创建branch2(但不会切换到该分支),如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,
      • 如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支
    • 利用git fetch拉取远端数据的方法

      • 方法一
        • git fetch origin master 从远程的origin仓库的master分支下载代码到本地的origin/master
        • git merge origin/master 把远程下载下来的代码合并到当前本地仓库
      • 方法二
        • git fetch origin master:temp 从远程的origin仓库的master分支下载到本地分支temp
        • git merge temp 合并temp分支到当前分支 (之后git push)
    • 本地代码误删

      • git fetch --all && git reset --hard origin/master && git pull
  • git stash (把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。)

    • git stash 等价于 git stash save
    • git stash save message, message是文字说明
    • git stash list,显示保存的工作进度列表,编号越小代表保存进度的时间越近
    • git stash pop stash@{num}, 恢复工作进度到工作区
    • git stash apply stash@{num}, 恢复工作进度到工作区且该工作进度可重复恢复
    • git stash drop stash@{num},删除一条保存的工作进度
    • git stash clear, 删除所有保存的工作进度
    • 如果想git stash 部分文件:
      • git stash -p,交互式命令,决定每个文件的操作方式
      • git stash push or git stash push -m message ,执行该操作前应该已经add过
      • git stash --keep-index -> git reset
  • 注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。

  • 工作时,push的代码不完善需要重新commit,但又不希望产生多次提交,污染日志,采用如下方法:

    • git add xx
    • git commit --amend --no-edit
    • git push --force xxx
  • git log --pretty=oneline 只会显示版本号和提交时的备注信息(或 git log --oneline)

  • git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)

    • 例如执行 git reset --hard HEAD~1,退回到上一个版本,用git log则是看不出来被删除的commitid,用git reflog则可以看到被删除的commitid,便于恢复到被删除的那个版本。
  • git rm --cached 撤销add操作

  • git reset HEAD . 撤销add操作

  • 撤销commit操作:

    • git reset --soft HEAD~1
  • 当本地代码与远程仓库发生冲突:

    • 希望本地代码覆盖远程仓库
      • 利用git stash保存本地 -> git pull 覆盖 -> git stash pop 再覆盖
      • 或者笨方法,本地重命名保存
    • 希望远程仓库覆盖本地代码
      • git checkout file,放弃工作区的修改
  • 其余常用命令,有时间再总结

    • git diff
    • git rebase
    • git reset 用于回退版本
    • git revert 用于“反做”某一版本,以撤销该版本,会生成一个新的版本
    • git log
  • 解决Github 每次上传都要输入用户名和密码

  • 如何写.gitignore

  • 如何合并远程分支

  • git全方位解读

  • git常用命令解读

posted @ 2019-11-09 22:41  szx_spark  阅读(307)  评论(0编辑  收藏  举报