Skip to content

Latest commit

 

History

History
91 lines (51 loc) · 5.95 KB

git_learn.md

File metadata and controls

91 lines (51 loc) · 5.95 KB

Git 常用命令

()表示可选项

工作区&暂存区

工作区就是你在电脑里能看到的目录。

git init 初始化仓库

git diff readme.md/git diff 查看工作区和暂存区的差异

git add readme.md (git add在commit之前可以多次执行)

git status 查看仓库状态,可以看到commit之前暂存区的修改,commit之后,status就clean了

git restore --staged sample_data/README.md 该命令将add到暂存区的修改撤回

git commit -m 'xxxxx' 将暂存区的所有add的修改全部提交

撤销修改:

每次修改,如果不用git add到暂存区,那就不会加入到commit

git checkout -- file可以丢弃工作区的修改:总之,就是让这个文件回到最近一次git commitgit add时的状态。(如果commit后修改了没有add,那就是撤销修改回到和版本库一模一样的状态;已经add到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。)

假如已经将修改add了,使用git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区:再用上面的checkout命令丢弃工作区的修改。

版本回退

git log (--pretty=oneline) 可以查看由近到远的commit历史提交记录,按Q可以退出

HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,往上100个版本就是HEAD~100

git reset --hard HEAD^ 回退到上一个版本 (注意,该操作会修改工作区文件,返回到上一个commit之前)

git reset --hard commit_id Git允许我们在版本的历史之间穿梭

commit_id可以通过查看历史git命令来寻找git reflog

删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了;这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status命令会立刻告诉你哪些文件被删除了:

现在你有两个选择,一是确实要从版本库中删除该文件,那就用命令git rm删掉,并且git commit:另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:git checkout -- test.txt

本地仓库&远程仓库

**添加远程库:**在github上新建仓库,可以从这个仓库克隆出新的仓库,也可以把一个已有的本地仓库与之关联,然后,把本地仓库的内容推送到GitHub仓库。git remote add origin git@github.com:xxxx/xxxx.git

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。git push -u origin master。从现在起,只要本地作了提交,就可以通过命令:git push origin master

删除远程库: git remote -v查看远程库信息;git remote rm origin 此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。

同步远程仓库:先 git addcommit之后 ;git remote add upstream xxxx.git ,再 git fetch upstream,若上游仓库有变更,需要先进行rebase: git rebase upstream/master, rebase是指将当前分支的基分支修改到upstream/master(因为基分支可能已经有了改动), 并将当前分支在原始基分支上的改动重新commit到新基分支上。在这里插入图片描述

分支管理

创建与合并分支:分支的创建与合并实际上是指针的创建与移动。

  • 查看分支:git branch
  • 创建分支:git branch <name>
  • 切换分支:git checkout <name>或者git switch <name>
  • 创建+切换分支:git checkout -b <name>或者git switch -c <name>
  • 合并某分支到当前分支:先切换到主分支,再 git merge <name>。在其他分支add以及commit以后,相当于在那条分支上生成了新的commit节点,在和主分支合并以前,此时若切换回主分支,会发现之前在其他分支上提交的修改消失了,此时我们再切换回其他分支,工作区的修改又恢复了,这就是git的奇妙之处。若其他分支commit过了,在主分支上我们对同一文件做出了修改,会提示merge失败,因为git不知道该如何合并,我们可以git checkout -- <filename> 来放弃在master分支对这个文件的修改,或者使用git stage存起来。
  • 删除分支:git branch -d <name>
  • 删除远程分支:git push origin --delete [branch_name]

BUG分支:

  • 存储工作现场:git stash

  • 查看存储的工作现场:git stash list

  • 恢复工作现场:一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

    另一种方式是用git stash pop,恢复的同时把stash内容也删了

  • 指定恢复某个工作现场:你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令git stash apply stash@{0}

  • 复制一个特定的提交到当前分支: git cherry-pick <commit>

多人协作:

  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
  • 查看远程库信息,使用git remote -v
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。