如果您使用的是Windows,并且要执行以下步骤,则只需在本地计算机上设置Git 。
在进入Git命令之前,请记住(不要忘记!),Git具有一个工作目录,一个暂存区和本地存储库。 请参阅下面的概述,摘自http://progit.org 。
GIT工作流程如下:您转到要进行版本控制的目录。 您可以使用git init
将此目录置于版本控制下。 这将为该当前位置创建一个新的存储库。 您对文件进行更改,然后使用git add
将文件暂存到暂存区域。 您将使用git status
和git diff
来查看所做的更改,最后使用git commit
将快照永久永久记录到本地存储库中。 当您要将更改上传到远程存储库时,将使用git push
。 当您要将更改从远程存储库下载到本地存储库时,将使用git fetch
和git merge
。
让我们逐步进行此操作。
要从现有文件目录创建存储库,只需在该目录中运行git init
即可。 转到要在版本控制下的目录:
git init
在提交到存储库之前,需要将所有新文件和更改过的文件添加到登台区域。 要将当前目录中的所有文件添加到暂存区:
git add --all
提交文件并更改存储库:
git commit -am "Initial commit"
注意,我使用了-am
选项,它隐式地执行了add -all
。 此命令等效于SVN或CVS风格的“提交”。 再说一次:如果您想更新本地Git存储库,总会有一个添加操作和一个提交操作,以及所有新文件和修改过的文件。
然后,您可以在Github.com上创建一个存储库 。 假设您将其命名为git_example。
然后,将远程存储库地址添加到本地GIT配置中:
git remote add EXAMPLE https://[email protected]/nschlimm/git_example.git
请注意,在示例中,这就是我在Github.com上的用户名。 您显然需要使用您的。 我将远程存储库命名为“ EXAMPLE”。 您可以引用别名而不是始终使用远程URL。 您现在准备与远程存储库进行通信。
如果您在防火墙后面,请进行代理配置:
git config --global http.proxy http://username:[email protected]:80
然后,将文件推送到远程存储库:
git push EXAMPLE master
然后想象有人更改了远程文件。 您需要获取它们:
git fetch EXAMPLE
您需要将这些更改从远程主服务器合并到本地主分支(普通语言:将更改从本地存储库复制到工作目录)。 假设您当前的上下文是master分支,并且想要将EXAMPLE分支合并到master中,您将编写:
git merge EXAMPLE
要将登台区域与您的工作目录进行比较:
git status -s
该示例显示了修改README.txt(但尚未添加或提交)后的状态。
没有任何额外的参数,简单的git diff
将显示自上次提交以来您在项目中更改的内容,这些内容尚未下一次提交到下一个提交快照。
git diff
该示例显示了在我编辑README.txt文件(但尚未添加或提交)之后的差异输出。 当我将所有更改添加到暂存时, git diff
将不会显示更改,因为您的工作目录中没有未暂存的内容。
git status
不同。 它显示了您最后一次提交与暂存/工作区域之间的区别:
简而言之: git status
显示本地存储库与工作目录/临时区域之间的差异。 而git diff
(如上所述)显示了暂存区域和工作目录之间的差异。
而已。 这些是新手必须了解的最重要的Git命令。 有关使用Git的更多信息,请参见gitref.org参考。
下载远程存储库
如果您要将存储库从Github.com(或任何其他远程地址)复制到本地计算机,请执行以下操作:
git clone https://[email protected]/nschlimm/spring-decorator.git
现在,您可以处理代码,并根据需要将更改推送回该远程存储库。
与分支机构合作–更改当前环境
Git中的分支不过是您正在使用的“当前上下文”。通常,您开始在“ master”分支中工作。 假设您想尝试一些东西,但不确定自己在做什么是否是个好主意(实际上经常会发生:-))。 在这种情况下,您可以创建一个新分支并尝试您的想法:
git branch [branch_name]
当您只输入git branch
,它将列出您的新分支。
如果您想使用新分支,可以编写:
git checkout [branch_name]
需要注意的一个重要事实:如果在分支之间切换,它不会更改已修改文件的状态。 假设您有一个修改后的文件foo.java
。 您从master
分支切换到新的some_crazy_idea
分支。 切换之后, foo.java
仍将处于修改状态。 您现在可以将其提交到some_crazy_idea
分支。 如果您切换到master
分支,则此提交将不可见,因为您未在master
分支上下文中提交。 如果文件是新文件,则您甚至不会再在工作树中看到该文件。
如果您想让其他人知道您的新想法,可以将分支推送到远程存储库:
git push [remote_repository_name] [branch_name]
您将使用fetch
而不是push
来将远程分支中的更改再次获取到本地存储库中。
如果不再需要分支,可以通过以下方法再次删除它:
git branch -d [branch_name]
删除文件
如果您不小心将某些内容提交给分支机构,则可以轻松地再次删除该文件。 例如,要删除当前分支中的readme.txt
文件:
git rm --cached readme.txt
--cached
选项仅从索引中删除文件。 您的工作目录保持不变。
您也可以删除文件夹。 例如,eclipse项目的.settings
文件夹不应该与他人共享:
git rm --cached -r some_eclipse_project/.settings
运行rm
命令后,文件仍在索引中(Git版本控制的历史记录)。 您可以使用以下命令永久删除完整的历史记录:
注意:请小心使用此类命令,并在将其应用于生产性存储库之前在存储库副本中尝试使用它们。 在运行此类命令之前,请始终创建完整存储库的副本。
git filter-branch --index-filter 'git rm --cached --ignore-unmatch [your_file_name]' HEAD
忽略文件:您不想对某个文件或目录进行版本控制
要忽略文件,只需将文件名添加到拥有该文件的目录中的.gitignore
文件中。 这样,它将不再添加到版本控制中。 这是我的.gitignore
用于Eclipse项目的根目录:
/target
/.settings
.project
.classpath
它忽略target
和.settings
文件夹以及.project
和.classpath
文件。
有时,配置适用于完整存储库的全局忽略规则很有帮助:
git config --global core.excludesfile ~/.gitignore_global
这将以下条目添加到我的.gitconfig
全局参数文件中,该文件位于git根目录中。
excludesfile = d:/dev_home/repositories/git/.gitignore_global
这些是我的.gitignore_global
文件中当前的全局排除规则: # Compiled source #
注意:这些规则与其他用户共享。 可以将本地每个仓库规则添加到仓库中的.git / info / exclude文件中。 这些规则未与存储库一起提交,因此不会与其他人共享。
###################
*.class
恢复文件–放回时钟
有时,您对文件进行了更改,一段时间后,您意识到所做的事情是个坏主意。 然后,您想回到最后的提交状态。 如果您对工作目录进行了更改,并且想要恢复工作目录中的上一个HEAD提交,请输入:
git reset --hard HEAD
该命令将当前分支头设置为最后一个提交(HEAD),并使用最后一个提交状态( --hard
选项)覆盖本地工作目录。 因此它将覆盖您的已修改文件。
您可以命名分支或类似“ v0.6”的标记来代替HEAD(这是您的最后一次提交)。 您还可以重置为先前的提交:HEAD〜2是最后一次提交之前的提交。
可能是您想要恢复在工作目录中删除的文件。 这是我输入的用于还原意外删除的Java文件的内容:
git checkout HEAD sources/spring-decorator/src/test/java/com/schlimm/decorator/simple/SetupSession.java
再次:您可以使用分支或类似'v0.6'的标签来代替HEAD。 您可以从先前的提交中提取文件:HEAD〜2是最后一次提交之前的提交。
使用标签–为您的源代码添加书签
有时您想要制作源代码的版本。 这样,您以后可以参考它。 要将版本标签v1.0.0应用于您的文件,请执行以下操作:
git tag -a v1.0.0 -m "Creating the first official version"
您可以在远程存储库中与他人共享标签:
git push [remote_repository_name] --tags
其中remote_repository_name
是您的远程存储库的别名。 您编写fetch
而不是push
来获取其他人提交给远程存储库的标签,再到本地存储库。
如果您仅输入git tag
,它将为您提供已知标签的列表。 要获取有关v1.0.0标记的信息,您可以编写:
git show v1.0.0 -s
如果要继续处理标签,例如在版本为v5.0.1的生产分支上,请输入:
git checkout v5.0.1 -b [your_production_branch]
请注意,此命令还会为该标记创建一个新分支,这样您就可以进行提交以及您希望记录回存储库的任何其他内容。
参考:来自JCG合作伙伴 Niklas的“ Git新手的十大命令”。
翻译自: https://www.javacodegeeks.com/2012/08/git-newbie-commands.html