标签:git 资料 txt ott work 请求 blog 博客 got
[!NOTE]
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改。
git config --global user.name "huyaocode"
git config --global user.email johndoe@example.com
git add 文件名或路径
创建一个.gitignore
文件,可描述需要忽略的文件。 参考
# no .a files
*.a
# but do track lib.a, even though you're ignoring .a files above
!lib.a
# 只忽略当前文件夹下已 TODO 为名的文件
/TODO
# 忽略当前目录下 build 这个文件夹
build/
# ignore doc/notes.txt, but not doc/server/arch.txt
doc/*.txt
# ignore all .pdf files in the doc/ directory
doc/**/*.pdf
git status -s
将每个修改状态以一行展示,也可以用git status
多行展示。
A
新添加到暂存区中的文件M
修改过的文件D
被删除的文件MM
出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。??
未跟踪git diff
git diff --cached
或 git diff --staged
运行git commit
,会出现如下情况。这种方式会启动文本编辑器,开头还有一空行,供你输入提交说明。下面的行是被注释了的,也可以取消这些注释。
一般是vim 或 emacs。当然也可以按照 起步 介绍的方式,使用 git config --global core.editor
命令设定你喜欢的编辑软件。
也可以使用git commit -m "修改描述"
这种直接输入描述的方式提交修改。
git commit
加上 -a
选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤
要从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。
可以用 git rm 命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在未跟踪文件清单中了。
运行 git rm
记录此次移除文件的操作。下一次提交时,该文件就不再纳入版本管理了。 如果删除之前修改过并且已经放到暂存区域的话,则必须要用强制删除选项 -f
(译注:即 force 的首字母)。 这是一种安全特性,用于防止误删还没有添加到快照的数据,
这样的数据不能被 Git 恢复。
想把文件从 Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中。(不想让Git跟踪)
git rm --cached 某文件
git mv file_from file_to
其实,运行 git mv 就相当于运行了下面三条命令:
mv README.md README
git rm README.md
git add README
[!NOTE]
git log
git log 会按提交时间列出所有的更新,最近的更新排在最上面。 正如你所看到的,这个命令会列出每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明。
使用 -p
用来限制展示条数。git log -p -2
使用 --stat
选项看到每次提
使用format
,定制要显示的记录格式。
使用--graph
可形象地展示你的分支、合并历史。
$ git log --pretty=format:"%h %s" --graph
* 2d3acf9 ignore errors from SIGCHLD on trap
* 5e3ee11 Merge branch 'master' of git://github.com/dustin/grit
|| * 420eac9 Added a method for getting the current branch.
* | 30e367c timeout code and tests
* | 5a09431 add timeout protection to grit
* | e1193f8 support for heads with slashes in them
|/
* d6016bc require time for xmlschema
* 11d191e Merge branch 'defunkt' into local
[!NOTE]
有时候我们提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了。 此时,可以运行带有--amend
选项的提交命令尝试重新提交。
git commit --amend
这个命令会将暂存区中的文件提交。 如果自上次提交以来你还未做任何修改(例如,在上次提交后马上执行了此命令),那么快照会保持不变,而你所修改的只是提交信息。
文本编辑器启动后,可以看到之前的提交信息。 编辑后保存会覆盖原来的提交信息。
例如,你提交后发现忘记了暂存某些需要的修改,可以像下面这样操作:
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
最终你只会有一个提交 - 第二次提交将代替第一次提交的结果。
使用 git reset HEAD <file>
来取消暂存。在调用时加上 --hard 选项可以令 git reset 成为一个危险的命令(译注:可能导致工作目录中所有当前进度丢失!)
使用git checkout -- <file>
可以撤销修改(未保存到暂存区)
简单来说,git pull 是 git fetch + git merge。
当你使用 pull,Git 会试着自动为你完成工作。它是上下文(工作环境)敏感的,所以 Git 会把所有拉取的提交合并到你当前处理的分支中。pull 则是 自动合并提交而没有让你复查的过程。如果你没有细心管理你的分支,你可能会频繁遇到冲突。
当你 fetch,Git 会收集目标分支中的所有不存在的提交,并将这些提交存储到本地仓库中。但Git 不会把这些提交合并到当前分支中。这种处理逻辑在当你需要保持仓库更新,在更新文件时又希望处理可能中断的事情时,这将非常实用。而将提交合并到主分支中,则该使用 merge。
假设你的情形是这样,其中 C 是你的 HEAD,(F) 是你文件的状态。
(F)
A-B-C
↑
master
(F)
A-B-C
↑
master
要修改提交中的更改:
git reset --hard HEAD~1
1
git reset --hard HEAD~1
现在B是 HEAD,因为你使用了 --hard,所以你的文件将重置到提交 B 时的状态。
要撤销提交但保留更改:
git reset HEAD~1
1
git reset HEAD~1
现在我们告诉 Git 将 HEAD 指针移回(后移)一个提交(B),并保留文件原样,然后你可以 git status 来显示你已经检入 C 的更改。
撤销提交但保留文件和索引:
git reset --soft HEAD~1
1
git reset --soft HEAD~1
执行此操作后,git status,你讲看到索引中的文件跟以前一致。
[!NOTE]
命令 git cherry-pick 通常用于把特定提交从存储仓库的一个分支引入到其他分支中。常见的用途是从维护的分支到开发分支进行向前或回滚提交。
这与其他操作(例如:合并(merge)、变基(rebase))形成鲜明对比,后者通常是把许多提交应用到其他分支中。
小结:
git cherry-pick <commit-hash>
1
git cherry-pick <commit-hash>
Forking 工作流程 与其他流行的 Git 工作流程有着根本的区别。它不是用单个服务端仓库充当“中央”代码库,而是为每个开发者提供自己的服务端仓库。Forking 工作流程最常用于公共开源项目中。
Forking 工作流程的主要优点是可以汇集提交贡献,又无需每个开发者提交到一个中央仓库中,从而实现干净的项目历史记录。开发者可以推送(push)代码到自己的服务端仓库,而只有项目维护人员才能直接推送(push)代码到官方仓库中。
当开发者准备发布本地提交时,他们的提交会推送到自己的公共仓库中,而不是官方仓库。然后他们向主仓库提交请求拉取(pull request),这会告知项目维护人员有可以集成的更新。
[!NOTE]
Gitflow 工作流程使用两个并行的、长期运行的分支来记录项目的历史记录,分别是 master 和 develop 分支。
[!NOTE]
git stash 命令把你未提交的修改(已暂存(staged)和未暂存的(unstaged))保存以供后续使用,以后就可以从工作副本中进行还原。
回顾:
$ git status
On branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage
$ git status
On branch master
nothing to commit, working tree clean
$ git status
On branch master
Changes to be committed:
new file: style.css
Changes not staged for commit:
modified: index.html
$ git stash
Saved working directory and index state WIP on master: 5002d47 our new homepage
HEAD is now at 5002d47 our new homepage
$ git status
On branch master
nothing to commit, working tree clean
我们可以使用暂存(stash)的一个地方是,如果我们发现在上次提交中忘记了某些内容,并且已经开始在同一分支中处理下一个提交了:
# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something
# stash away the current mess I made
$ git stash save
# some changes in the working dir
# and now add them to the last commit:
$ git add -u
$ git commit --ammend
# back to work!
$ git stash pop
# Assume the latest commit was already done
# start working on the next patch, and discovered I was missing something
# stash away the current mess I made
$ git stash save
# some changes in the working dir
# and now add them to the last commit:
$ git add -u
$ git commit --ammend
# back to work!
$ git stash pop
如果你在 git add 过程中误操作,你最终会添加不想提交的文件。但是,git rm 则会把你的文件从你暂存区(索引)和文件系统(工作树)中删除,这可能不是你想要的。
换成 git reset 操作:
git reset filename # or
echo filename >> .gitingore # add it to .gitignore to avoid re-adding it
1
2
git reset filename # or
echo filename >> .gitingore # add it to .gitignore to avoid re-adding it
上面意思是,git reset
[!NOTE]
这两个命令都是把修改从一个分支集成到另一个分支上,它们只是以非常不同的方式进行。
考虑一下场景,在合并和变基前:
A <- B <- C [master]
^
D <- E [branch]
1
2
3
4
A <- B <- C [master]
^
D <- E [branch]
在 git merge master 之后:
A <- B <- C
^ ^
?
D <- E <- F
1
2
3
4
A <- B <- C
^ ^
?
D <- E <- F
在 git rebase master 之后:
A <- B <- C <- D <- E
1
A <- B <- C <- D <- E
使用变基时,意味着使用另一个分支作为集成修改的新基础。
如果你对修改不够果断,请使用合并操作。
根据你希望的历史记录的样子,而选择使用变基或合并操作。
参考资料
【前端开发环境】前端使用GIT管理代码仓库需要掌握的几个必备技巧和知识点总结
标签:git 资料 txt ott work 请求 blog 博客 got
原文地址:https://www.cnblogs.com/fecommunity/p/11914618.html