通过命令行设置Git

在为命令行安装Git工具之后,您需要配置Git。

使用Git所需的最低信息是Git应该使用的用户名和电子邮件。

您还可以将Git配置为在拉取操作期间使用rebase,这也是Git的常用设置。

通过以下命令为Git配置用户和电子邮件。

1
2
3
4
5
6
7
8
9
10
# configure the user which will be used by Git
# this should be not an acronym but your full name
git config --global user.name "Firstname Lastname"

# configure the email address
git config --global user.email "your.email@example.org"

# use rebase instead of merge in the `git pull` command.
# this avoids merge commits during the pull operation
git config --global branch.autosetuprebase always

允许使用未经修改的更改进行变基础

如果您希望Git在rebase之前自动保存您未经修改的更改,则可以激活autoStash。在rebase完成后,您的更改将被重新应用。有关解释,git stash请参阅Git中的Stashing更改。

1
git config --global rebase.autoStash true

在Git v2.6 git pull –rebase之前没有尊重这个设置。

用Git修正更正提交的更改

git commit --amend命令可以重做上次提交的更改。它使用调整后的更改创建新提交。

修改后的提交仍然可用,直到清理作业将其删除。但它不包含在git log输出中,因此它不会分散用户的注意力。有关详细信息,请参阅git reflog

假设最后一次提交消息不正确,因为它包含一个拼写错误。以下命令通过--amend参数对此进行更正。

1
2
3
4
# assuming you have something to commit
git commit -m "message with a tpyo here"
# amend the last commit
git commit --amend -m "More changes - now correct"

您应该git --amend仅将命令用于尚未推送到另一个Git存储库的公共分支的提交。该git --amend命令创建一个新的提交ID,人们可能已将其工作基于现有提交。如果是这种情况,他们将需要根据新提交迁移他们的工作。

配置要忽略的文件和目录

使用.gitignore文件忽略文件和目录

可以将Git配置为忽略存储库操作的某些文件和目录。这是通过一个或多个.gitignore文件配置的。通常,此文件位于Git存储库的根目录下,但也可以位于子目录中。在第二种情况下,定义的规则仅对子目录及以下有效。

您可以在此文件中使用某些通配符。*匹配几个字符。可以使用更多模式,并在以下URL中进行描述:gitignore联机帮助页

例如,以下.gitignore文件告诉Git忽略bintarget目录以及以〜结尾的所有文件。

1
2
3
4
5
6
7
8
9
# ignore all bin directories
# matches "bin" in any subfolder
bin/

# ignore all target directories
target/

# ignore all files ending with ~
*~

您可以.gitignore在工作树的根目录中创建该文件,以使其特定于Git存储库。

.gitignore文件告诉Git忽略Git命令中的指定文件。您仍然可以使用参数(即使用命令)将忽略的文件添加到Git存储库的临时区域--forcegit add --force [paths]如果要添加(例如)自动生成的二进制文件,这非常有用,但您需要对添加的版本进行精细控制,并希望将其从正常工作流中排除。

最好将本地.gitignore文件提交到Git存储库中,以便克隆此存储库的每个人都拥有它。

停止基于.gitignore文件跟踪文件

如果将Git跟踪的.gitignore文件添加到文件中,则不会自动删除这些文件。Git永远不会忽略已经跟踪的.gitignore文件,因此文件中的更改只会影响新文件。如果要忽略已跟踪的文件,则需要明确删除它们。

以下命令演示了如何从跟踪中删除.metadata目录和doNotTrackFile.txt文件。这是示例代码,因为您未在示例中提交相应的文件,该命令将无法在您的Git存储库中运行。

1
2
3
4
# remove directory .metadata from git repo
git rm -r --cached .metadata
# remove file test.txt from repo
git rm --cached doNotTrackFile.txt

将文件添加到.gitignore文件不会从存储库历史记录中删除该文件。如果还应从历史记录中删除该文件,请查看git filter-branch允许您重写提交历史记录的命令。有关详细信息,请参阅使用git filter branch命令(filter-branch)

全局(跨存储库).gitignore设置

您还可以.gitignore通过该core.excludesfile设置设置对所有Git存储库有效的全局文件。以下代码段演示了此设置的设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Create a ~/.gitignore in your user directory
cd ~/
touch .gitignore

# Exclude bin and .metadata directories
echo "bin" >> .gitignore
echo ".metadata" >> .gitignore
echo "*~" >> .gitignore
echo "target/" >> .gitignore
# for Mac
echo ".DS_Store" >> .gitignore
echo "._*" >> .gitignore

# Configure Git to use this file
# as global .gitignore

git config --global core.excludesfile ~/.gitignore

全局.gitignore文件仅在本地可用。

本地每个存储库忽略规则

您还可以通过编辑存储库中的.git/info/exclude文件来创建本地每存储库规则。这些规则不会与存储库一起提交,因此不会与其他人共享。

这允许您排除,例如,本地生成的文件。

使用Git跟踪空目录

Git忽略空目录,即它不会将它们置于版本控制之下。如果要跟踪Git存储库中的空目录,最好.gitignore将目录中调用的文件放入。由于目录现在包含一个文件,Git将其包含在其版本控制机制中。

该文件可以被称为任何东西。有人建议调用该文件.gitkeep。这种方法的一个问题是.gitkeep构建系统不太可能忽略它。这可能导致.gitkeep文件被复制到输出存储库,这通常是不希望的。

Git创建新内容

使用以下命令创建几个新文件。

1
2
3
4
5
6
7
8
9
10
# switch to your Git repository
cd ~/repo01

# create an empty file in a new directory
touch datafiles/data.txt

# create a few files with content
ls > test01
echo "bar" > test02
echo "foo" > test03

Git删除本地分支

命令行方式:

1
2
3
4
5
6
7
8
9

# 切换到要操作的项目文件夹 
$ cd <ProjectPath>   # 例如,$ cd /Downloads/G25_platform_sdk

#查看项目的分支们(包括本地和远程) 
$ git branch -a     # 例如,$ git branch -a 

# 删除本地分支 
$ git branch -d <BranchName>

删除成功后,会有类似这样的一个输出:

1
2
$ git br -d feature/develop
Deleted branch feature/develop (was 69d5ce962).

提交.Gitignore文件

.gitignore文件提交到Git存储库是一种很好的做法。为此,请使用以下命令。

1
2
3
4
# add the .gitignore file to the staging area
git add .gitignore
# commit the change
git commit -m "Adds .gitignore file"

避免合并提交

默认情况下,如果使用该命令,Git将运行命令git fetch后跟命令。您可以通过以下设置配置git 而不是pull命令。git mergegit pullgit rebasegit merge

1
2
# set default so that you avoid unnecessary commits
git config --global branch.autosetuprebase always

此设置有助于避免在将Git存储库与远程存储库同步的拉取操作期间进行合并提交。此描述的作者始终将此设置用于其Git存储库。

更改暂存的文件

如果在提交之前更改其中一个暂存文件,则需要将更改再次添加到暂存区域,以提交新更改。这是因为Git创建了暂存文件内容的快照。必须再次进行所有新的更改。

1
2
3
4
5
# append a string to the test03 file
echo "foo2" >> test03

# see the result
git status

验证新更改尚未暂存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file: datafiles/data.txt
new file: test01
new file: test02
new file: test03

Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: test03

将新更改添加到暂存区域。

1
2
# add all files to the index of the Git repository
git add .

git status再次使用该命令可以查看所有更改是否已暂存。

1
2
3
4
5
6
7
8
9
10
11
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file: datafiles/data.txt
new file: test01
new file: test02
new file: test03

查看Git提交历史记录

您执行的Git操作已在该.git文件夹中创建了一个本地Git存储库,并通过一次提交将所有文件添加到此存储库。运行git log命令以查看历史记录。

1
2
# show the Git log for the change
git log

您会看到类似于以下内容的输出。

1
2
3
4
5
commit 30605803fcbd507df36a3108945e02908c823828
Author: Lars Vogel <Lars.Vogel@vogella.com>
Date: Mon Dec 1 10:43:42 2014 +0100

Initial commit

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×