你使用过 Git 吗?也许你已经使用了一段时间,但它的许多奥秘仍然使人困惑。git
Git 是一个版本控制系统,是任何软件开发项目中的主要内容。一般有两个主要用途:代码备份和代码版本控制。你能够逐步处理代码,在须要回滚到备份副本的过程当中保存每一步的进度!github
常见的问题是 Git 很难使用。有时版本和分支不一样步,你会花很长时间试图推送代码!更糟糕的是,不知道某些命令的确切工做方式很容易致使意外删除或覆盖部分代码!shell
这就是我写本文的缘由,从而学习到如何正确使用 Git,以便在开发中共同进行编码!服务器
首先,咱们必须安装 Git 才能使用它!这里分 Linux 和 Windows 来演示:框架
在 Linux 上安装 Git编辑器
咱们可使用 yum 轻松快速地作到这一点:学习
sudo yum install git
在 Windows 上安装 Gitui
直接在 https://git-scm.com/downloads
里面,下载最新版的 Git,默认安装就能够了。this
安装完成后,在开始菜单里找到 Git->Git Bash
,点击后出现一个相似命令行窗口的东西,就说明 Git 安装成功。编码
能够保存 Git 用户名和电子邮件,这样就没必要在之后的 Git 命令中再次输入它们。
在命令行中配置本地仓库的帐号和邮箱:
$ git config --global user.name "wupx" $ git config --global user.email "wupx@qq.com"
好多人都不知道的小技巧是,你能够为 Git 启用一些额外的颜色,这样就能够更容易地阅读命令的输出!
git config --global color.ui true
如今,咱们能够开始对项目进行版本控制。使用 cd 命令导航到要在终端中设置版本控制的目录,如今你能够像这样初始化 Git 存储库:
git init
这将建立一个名为 .git 的新子目录(Windows 下该目录为隐藏的),其中包含全部必需的存储库文件(Git 存储库框架)。至此,你的项目中还没有跟踪任何内容。
要开始对现有文件进行版本控制,你应该先跟踪这些文件并进行初始提交。要作到这一点,你首先须要将文件添加到 Git 中,并将它们附加到 Git 项目中。
git add <file> git commit -m 'first commit'
很棒!你如今已经开始在本地对项目进行版本控制。若是你想远程保存和备份项目,则须要在 GitHub 上建立一个远程存储库(它是免费的!)。所以,首先转到 github.com 并建立一个存储库。而后,使用存储库的连接将其添加为本地 git 项目的来源,即该代码的存储位置。
# 示例 git remote add origin \ https://github.com/wupeixuan/repo.git # 以个人一个仓库为例 git remote add origin \ https://github.com/wupeixuan/JDKSourceCode1.8.git
而后,你能够继续将代码推送到 GitHub!哇,你已经成功备份了你的代码!
git push origin master
git status 命令用于肯定哪些文件处于哪一种状态,它使你能够查看哪些文件已提交,哪些文件还没有提交。若是在全部文件都已提交并推送后运行此命令,则应该看到相似如下内容:
$ git status # On branch master nothing to commit (working directory clean)
若是你将新文件添加到项目中,而该文件以前不存在,则在运行 git status
时,你应该看到未跟踪的文件,以下所示:
$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # # README nothing added to commit but untracked files present (use "git add" to track)
使用 git status
对于快速检查你已经备份的内容和你仅在本地拥有的内容很是有用。
还有一些更高级的方法能够将文件添加到 Git 中,从而使你的工做流程更高效。咱们能够执行如下操做,而不是试图查找全部有更改的文件并逐个添加它们:
# 逐个添加文件 git add filename # 添加当前目录中的全部文件 git add -A # 添加当前目录中的全部文件更改 git add . # 选择要添加的更改(你能够 Y 或 N 完成全部更改) git add -p
咱们可使用 git commit -m '提交信息'
来将文件提交到 Git。对于提交简短消息来讲,这一切都很好,可是若是你想作一些更精细的事情,你须要来学习更多的操做:
### 提交暂存文件,一般用于较短的提交消息 git commit -m 'commit message' ### 添加文件并提交一次 git commit filename -m 'commit message' ### 添加文件并提交暂存文件 git commit -am 'insert commit message' ### 更改你的最新提交消息 git commit --amend 'new commit message' # 将一系列提交合并为一个提交,你可能会用它来组织混乱的提交历史记录 git rebase -i ### 这将为你提供核心编辑器上的界面: # Commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like "squash", but discard this commit's log message # x, exec = run command (the rest of the line) using shell
GitHub存储库的master分支应始终包含有效且稳定的代码。可是,你可能还但愿备份一些当前正在处理的代码,但这些代码并不彻底稳定。也许你要添加一个新功能,你正在尝试和破坏不少代码,可是你仍然但愿保留备份以保存进度!
分支使你能够在不影响master分支的状况下处理代码的单独副本。首次建立分支时,将以新名称建立master分支的完整克隆。而后,你能够独立地在此新分支中修改代码,包括提交文件等。一旦你的新功能已彻底集成而且代码稳定,就能够将其合并到master分支中!
这是你在分支上建立和工做所需的全部东西:
### 建立一个本地分支 git checkout -b branchname ### 在2个分支之间切换 git checkout prc/dev-wupx git checkout master ### 将新的本地分支做为备份 git push -u origin branch_2 ### 删除本地分支,这不会让你删除还没有合并的分支 git branch -d branch_2 ### 删除本地分支,即便还没有合并,这也会删除该分支! git branch -D branch_2 ### Viewing all current branches for the repository, including both ### local and remote branches. Great to see if you already have a ### branch for a particular feature addition, especially on bigger ### projects ### 查看存储库的全部当前分支,包括本地和远程分支。 git branch -a ### 查看已合并到您当前分支中的全部分支,包括本地和远程。 很是适合查看全部代码的来源! git branch -a --merged ### 查看还没有合并到当前分支中的全部分支,包括本地和远程 git branch -a --no-merged ### 查看全部本地分支 git branch ### 查看全部远程分支 git branch -r # 将主分支从新设置为本地分支 $ git rebase origin/master # 将分支推送到远程存储库源并对其进行跟踪 $ git push origin branchname
很棒!如今,你已经学习了如何建立分支并开始敲代码!将新功能添加到分支中以后,你须要将其合并回master分支,以便您的master具备全部最新的代码功能。
方法以下:
### 首先确保你正在查看 master 分支 git checkout master ### 如今将你的分支合并到 master git merge prc/dev-wupx
你可能必须修复分支与主服务器之间的任何代码冲突,可是 Git 将向你展现在键入该 merge 命令后如何执行全部这些操做。
发生错误......它们常常在编码中发生!重要的是咱们可以修复它们。
不要慌!Git 提供了你所需的一切,以防你在所推送的代码中犯错,改写某些内容或者只是想对所推送的内容进行更正。
### 切换到最新提交的代码版本 git reset HEAD git reset HEAD -- filename # for a specific file ### 切换到最新提交以前的代码版本 git reset HEAD^ -- filename git reset HEAD^ -- filename # for a specific file ### 切换回3或5次提交 git reset HEAD~3 -- filename git reset HEAD~3 -- filename # for a specific file git reset HEAD~5 -- filename git reset HEAD~5 -- filename # for a specific file ### 切换回特定的提交,其中 0766c053 为提交 ID git reset 0766c053 -- filename git reset 0766c053 -- filename # for a specific file ### 先前的命令是所谓的软重置。 你的代码已重置,可是git仍会保留其余代码的副本,以备你须要时使用。 另外一方面,--hard 标志告诉Git覆盖工做目录中的全部更改。 git reset --hard 0766c053
咱们已经完成了全部细节部分!如下是一些 Git 提示和技巧,你可能会发现它们对改善工做流程很是有用!
### 搜索目录中的字符串部分 git grep 'project' ### 在目录中搜索部分字符串,-n 打印出 git 找到匹配项的行号 git grep -n 'project' ### git grep -C <行数> 'something' 搜索带有某些上下文的字符串部分(某些行在咱们正在寻找的字符串以前和以后) git grep -C<number of lines> 'project' ### 搜索字符串的一部分,并在字符串以前显示行 git grep -B<number of lines> 'project' ### 搜索字符串的一部分,并在字符串以后显示行 git grep -A<number of lines> 'something'
### 显示带有做者姓名的文件的更改历史记录 git blame 'filename' ### 显示带有做者姓名和 git commit ID 的文件的更改历史记录 git blame 'filename' -l
### 显示存储库中全部提交的列表 该命令显示有关提交的全部信息,例如提交ID,做者,日期和提交消息 git log ### 提交列表仅显示提交消息和更改 git log -p ### 包含您要查找的特定字符串的提交列表 git log -S 'project' ### 做者提交的清单 git log --author 'wupx' ### 显示存储库中提交列表的摘要。显示提交ID和提交消息的较短版本。 git log --oneline ### 显示昨天以来仓库中的提交列表 git log --since=yesterday ### 显示做者日志,并在提交消息中搜索特定术语 git log --grep "project" --author "wupx"