likes
comments
collection
share

git work-flow

作者站长头像
站长
· 阅读数 4

git work-flow

setting up a new repository

git init

  • 我们可以直接在当前目录下执行git init命令,在当前目录下初始化一个git仓库;也可以通过git init <project directory>指定初始化仓库的目录
  • 我们也可以通过git clone <repo url>命令克隆远程仓库;e.g:git clone git@github.com:biu9/test.git

git add & git commit

git add命令会将文件添加到仓库暂存区 git commit命令会将暂存区中的文件提交

e.g.

cd /path/to/your/own/project
echo "test for git" >> commitTest.md
git add commitTest.md
git commit -m "commit test"

执行完上述命令后的演示结果如下图,git commit -m "xxx"中的xxx是这次commit的注释

git work-flow

git remote

下面的代码将会在github的仓库的master分支上创建提交

git remote add gitTest git@github.com:biu9/git-test.git
git push -u gitTest master

git work-flow

git config

git config命令可以指定提交者的昵称与邮箱

我们可以通过git config --local/global/system -l三条命令查看在local / gloabl / system下的config内容

我们还可以通过git config --local user.email <email>来修改local config中的提交者email

Inspecting a repository

git status

git status可以显示当前git仓库中的工作目录与暂存区的状态

e.g:直接执行git status指令后的输出

但是用vscode的话直接装gitLens插件在侧边栏看变更似乎更方便?

git work-flow

gitignore

我们可以通过创建.gitignore文件来指定被git忽略的文件,我们可以通过在gitignore中加入*.txt使得git忽略.txt文件的变更

git log

  • git log会展示提交历史记录,可以通过git log -n <limit>来限制展示的提交历史记录数量
  • git log --stat会展示哪些文件被修改了,已经文件中被修改的行数
  • git log -p则还会显示每个提交的不同
  • git log --author="<pattern>"可以搜索特定作者的提交记录
  • git log --grep="<pattern>"则会匹配有对应内容的commit message的commit
  • git log <file>则会显示特定文件的提交记录

git log --author="thy" -p test.md这行命令会显示thy对于test.md文件的所有更改

undoing commits & changes

我们可以通过git log --oneline来查看当前分支所有的commit,每一个commit都有一个独特的SHA-1识别哈希

git checkout

我们可以通过git checkout <SHA-1 hash>来查看特定SHA-1识别哈希的分支,通过git checkout master可以返回到master分支头

我们可以通过git checkout -b <new-branch> <existing-branch>来创建一个签出自<existing-branch><new-branch>分支,当不指定<existing-branch>时,默认签出自当前工作分支

我们可以使用git checkout <SHA-1 hash>先回退到特定提交前,再签出一个新的分支以实现回退(?)

git revert HEAD

我们也可以通过git revert HEAD回退一步

git rest

git work-flow

git work-flow

git work-flow

git branch

  • 使用git branch查看当前所有分支;git branch -a还可以显示远程分支
  • 使用git branch <branch-name>创建新的分支
  • git branch -d <branch-name>可以删除分支;如果这个分支上有未merge的变更时,git会阻止删除,我们可以使用git branch -D <branch-name>强制删除
  • 使用git branch -m <branch-name>重命名

git syncing

git remote

git remote命令可以创建、查看、删除与远程仓库的连接,可以看作是对于直接用url的一种简化

  • git remote指令可以显示当前连接的远程仓库,git remote -v显示的结果会更详细一点
  • git remote add <name> <url>指令可以将远程<url>地址的仓库命名为<name>连接到本地
  • git remote rm <name>删除连接
  • git remote rename <old-name> <new-name>重命名

git fetch

git fetch可以看作是一种更安全的同步方式,与git pull相比,它不会立刻执行merge

how git fetch works

本地分支的更改的指针储存在.git/refs/heads/,远程分支的更改的指针储存在.git/refs/remotes中,git同步实际上是先把远程分支的更改下载到.git/refs/remotes目录中,再通过merge与本地分支合并

fetch commands
  • git fetch <remote>,拉取指定远程仓库名的全部分支
  • git fetch <remote> <branch>,拉取指定仓库的指定分支
  • git fetch --all,拉取所有建立了连接的远程仓库的全部分支

e.g. 这张图片演示了fetch远程分支并合并的过程,在这个过程中,我首先执行了同步,在修改了GitHub上的readme.md文件,可以看到,在fetch并merge后,本地上也出现了readme.md文件

git work-flow

git pull

git work-flow

git work-flow

git pull --rebase

git work-flow

e.g.

user-1

git work-flow

user-2

git work-flow

git push

  • git push <remote> <branch>推送特定分支到远程仓库,
  • git push <remote> --force强制推送,一般不建议使用(那么这样推送的分支是哪个?)
  • git push <remote> --all推送本地全部分支

当产生了non-fast-forward merge时,git会阻止你push,一种粗暴的解决方法是使用--force,但这样做一般都有很大风险,另一种方法是先从远程拉取分支到本地,在本地merge后再推送到远程

merging & rebasing

merge

git merge feature main

git work-flow

rebasing

git rebase feature main