git中文教程,面试阿里巴巴

1. Git

1.1. Git是何方神圣? 1.2. 重要的术语 1.3. 索引(stage)

2. 安装 3. 配置

3.1. 用户信息 3.2. 高亮显示 3.3. 忽略特定的文件 3.4. 使用.gitkeep来追踪空的文件夹

4. 开始操作Git

4.1. 创建内容 4.2. 创建仓库、添加文件和提交更改 4.3. diff命令和commit修改 4.4. Status, Diff和Commit Log 4.5. 更正提交的信息 - git amend 4.6. 删除文件

5. 远端仓库(remote repositories)

5.1. 设置一个远端的Git仓库 5.2. 推送修改到其他的仓库 5.3. 添加远端仓库 5.4. 显示已有的远端仓库 5.5. 克隆仓库 5.6. 拉取(Pull)修改

6. 还原更改 7. 标记 8. 分支和合并

8.1. 分支 8.2. 合并 8.3. 删除分支 8.4. 推送(Push)一个分支到远端仓库

9. 解决合并冲突 10. 变基(Rebase)

10.1. 在同一分支中应用Rebase Commit 10.2. Rebasing 多个分支 10.3. Rebase最佳实践

11. 创建和应用补丁 12. 定义同名命令 13. 放弃跟踪文件 14. 其他有用的命令 15. 安装Git服务 16. 在线的远端仓库

16.1. 克隆远端仓库 16.2. 添加远端仓库 16.3. 通过http和代理服务器进行远端操作

17. Git服务提供商

17.1. GitHub 17.2. Bitbucket

18. Git的图形接口 19. Kindle版本教程 20. 问题与讨论 21. 链接和文章

1. Git


1.1. Git是何方神圣?

Git是用C语言开发的分布版本控制系统。版本控制系统可以保留一个文件集合的历史记录,并能回滚文件集合到另一个状态(历史记录状态)。另一个状态可以是不同的文件,也可以是不同的文件内容。举个例子,你可以将文件集合转换到两天之前的状态,或者你可以在生产代码和实验性质的代码之间进行切换。文件集合往往被称作是“源代码”。在一个分布版本控制系统中,每个人都有一份完整的源代码(包括源代码所有的历史记录信息),而且可以对这个本地的数据进行操作。分布版本控制系统不需要一个集中式的代码仓库。

当你对本地的源代码进行了修改,你可以标注他们跟下一个版本相关(将他们加到index中),然后提交到仓库中来(commit)。Git保存了所有的版本信息,所以你可以转换你的源代码到任何的历史版本。你可以对本地的仓库进行代码的提交,然后与其他的仓库进行同步。你可以使用Git来进行仓库的克隆(clone)操作,完整的复制一个已有的仓库。仓库的所有者可以通过push操作(推送变更到别处的仓库)或者Pull操作(从别处的仓库拉取变更)来同步变更。

Git支持分支功能(branch)。如果你想开发一个新的产品功能,你可以建立一个分支,对这个分支的进行修改,而不至于会影响到主支上的代码。

Git提供了命令行工具;这个教程会使用命令行。你也可以找到图形工具,譬如与Eclipse配套的EGit工具,但是这些都不会在这个教程中进行描述。

1.2. 重要的术语

表 1. Git 术语

| 术语 | 定义 |

| :-- | :-- |

|

仓库(Repository)

| 一个仓库包括了所有的版本信息、所有的分支和标记信息。在Git中仓库的每份拷贝都是完整的。仓库让你可以从中取得你的工作副本。 |

| 分支(Branches) | 一个分支意味着一个独立的、拥有自己历史信息的代码线(code line)。你可以从已有的代码中生成一个新的分支,这个分支与剩余的分支完全独立。默认的分支往往是叫master。用户可以选择一个分支,选择一个分支叫做checkout. |

|

标记(Tags)

| 一个标记指的是某个分支某个特定时间点的状态。通过标记,可以很方便的切换到标记时的状态,例如2009年1月25号在testing分支上的代码状态 |

|

提交(Commit)

| 提交代码后,仓库会创建一个新的版本。这个版本可以在后续被重新获得。每次提交都包括作者和提交者,作者和提交者可以是不同的人 |

| URL | URl用来标识一个仓库的位置 |

|

修订(Revision)

| 用来表示代码的一个版本状态。Git通过用SHA1 hash算法表示的id来标识不同的版本。每一个 SHA1 id都是160位长,16进制标识的字符串.。最新的版本可以通过HEAD来获取。之前的版本可以通过"HEAD~1"来获取,以此类推。 |

1.3. 索引

Git 需要将代码的变化显示的与下一次提交进行关联。举个例子,如果你对一个文件继续了修改,然后想将这些修改提交到下一次提交中,你必须将这个文件提交到索引中,通过git add file命令。这样索引可以保存所有变化的快照。

新增的文件总是要显示的添加到索引中来。对于那些之前已经提交过的文件,可以在commit命令中使用-a 选项达到提交到索引的目的。

2. 安装


在Ubuntu上,你可以通过apt来安装git命令行工具

sudo apt-get install git-core

对于其他的Linux版本,请查看相关的软件包安装工具使用方法

msysgit项目提供了Windows版本的Git,地址是http://code.google.com/p/msysgit/

3. 配置


你可以在.gitconfig文件中防止git的全局配置。文件位于用户的home目录。 上述已经提到每次提交都会保存作者和提交者的信息,这些信息都可以保存在全局配置中。

后续将会介绍配置用户信息、高亮显示和忽略特定的文件

3.1. 用户信息

通过如下命令来配置用户名和Email

复制代码

# Configure the user which will be used by git

Of course you should use your name

git config --global user.name “Example Surname”

Same for the email address

git config --global user.email “your.email@gmail.com”

Set default so that all changes are always pushed to the repository

git config --global push.default “matching”

复制代码

获取Git配置信息,执行以下命令:

git config --list

3.2. 高亮显示

以下命令会为终端配置高亮

git config --global color.status auto

git config --global color.branch auto

3.3. 忽略特定的文件

可以配置Git忽略特定的文件或者是文件夹。这些配置都放在.gitignore文件中。这个文件可以存在于不同的文件夹中,可以包含不同的文件匹配模式。为了让Git忽略bin文件夹,在主目录下放置.gitignore文件,其中内容为bin。

同时Git也提供了全局的配置,core.excludesfile。

3.4. 使用.gitkeep来追踪空的文件夹

Git会忽略空的文件夹。如果你想版本控制包括空文件夹,根据惯例会在空文件夹下放置.gitkeep文件。其实对文件名没有特定的要求。一旦一个空文件夹下有文件后,这个文件夹就会在版本控制范围内。

4. 开始操作Git


后续将通过一个典型的Git工作流来学习。在这个过程中,你会创建一些文件、创建一个本地的Git仓库、提交你的文件到这个仓库中。这之后,你会克隆一个仓库、在仓库之间通过pull和push操作来交换代码的修改。注释(以#开头)解释了命令的具体含义

让我们打开命令行开始操作吧

4.1. 创建内容

下面创建一些文件,它们会被放到版本控制之中

复制代码

#Switch to home

cd ~/

Create a directory

mkdir ~/repo01

Switch into it

cd repo01

Create a new directory

mkdir datafiles

Create a few files

touch test01

touch test02

touch test03

touch datafiles/data.txt

Put a little text into the first file

ls >test01

复制代码

4.2. 创建仓库、添加文件和提交更改

每个Git仓库都是放置在.git文件夹下.这个目录包含了仓库的所有历史记录,.git/config文件包含了仓库的本地配置。

以下将会创建一个Git仓库,添加文件倒仓库的索引中,提交更改。

复制代码

# Initialize the local Git repository

git init

Add all (files and directories) to the Git repository

git add .

Make a commit of your file to the local repository

git commit -m “Initial commit”

Show the log file

git log

复制代码

4.3. diff命令与commit更改

通过git diff命令,用户可以查看更改。通过改变一个文件的内容,看看git diff命令输出什么,然后提交这个更改到仓库中

复制代码

# Make some changes to the file

echo “This is a change” > test01

echo “and this is another change” > test02

Check the changes via the diff command

git diff

Commit the changes, -a will commit changes for modified files

but will not add automatically new files

git commit -a -m “These are new changes”

复制代码

4.4. Status, Diff 和 Commit Log

下面会向你展示仓库现有的状态以及过往的提交历史

复制代码

# Make some changes in the file

echo “This is a new change” > test01

echo “and this is another new change” > test02

See the current status of your repository

(which files are changed / new / deleted)

git status

Show the differences between the uncommitted files

and the last commit in the current branch

git diff

Add the changes to the index and commit

git add . && git commit -m “More chaanges - typo in the commit message”

Show the history of commits in the current branch

git log

This starts a nice graphical view of the changes

gitk --all

复制代码

4.5. 更正提交的信息 - git amend

通过git amend命令,我们可以修改最后提交的的信息

上述的提交信息中存在错误,下面会修改这个错误

git commit --amend -m “More changes - now correct”

4.6. 删除文件

如果你删除了一个在版本控制之下的文件,那么使用git add .不会在索引中删除这个文件。需要通过带-a选项的git commit命令和-A选项的git add命令来完成

复制代码

# Create a file and put it under version control

touch nonsense.txt

git add . && git commit -m “a new file has been created”

Remove the file

rm nonsense.txt

Try standard way of committing -> will not work

git add . && git commit -m “a new file has been created”

Now commit with the -a flag

git commit -a -m “File nonsense.txt is now removed”

Alternatively you could add deleted files to the staging index via

git add -A .

git commit -m “File nonsense.txt is now removed”

复制代码

5. 远端仓库(remote repositories)


5.1. 设置一个远端的Git仓库

我们将创建一个远端的Git仓库。这个仓库可以存储在本地或者是网络上。

远端Git仓库和标准的Git仓库有如下差别:一个标准的Git仓库包括了源代码和历史信息记录。我们可以直接在这个基础上修改代码,因为它已经包含了一个工作副本。但是远端仓库没有包括工作副本,只包括了历史信息。可以使用–bare选项来创建一个这样的仓库。

为了方便起见,示例中的仓库创建在本地文件系统上

复制代码

# Switch to the first repository

cd ~/repo01

git clone --bare . …/remote-repository.git

Check the content, it is identical to the .git directory in repo01

ls ~/remote-repository.git

复制代码

5.2. 推送更改到其他的仓库

做一些更改,然后将这些更改从你的第一个仓库推送到一个远端仓库

复制代码

# Make some changes in the first repository

cd ~/repo01

Make some changes in the file

echo “Hello, hello. Turn your radio on” > test01

echo “Bye, bye. Turn your radio off” > test02

Commit the changes, -a will commit changes for modified files

but will not add automatically new files

git commit -a -m “Some changes”

Push the changes

git push …/remote-repository.git

复制代码

5.3. 添加远端仓库

除了通过完整的URL来访问Git仓库外,还可以通过git remote add命令为仓库添加一个短名称。当你克隆了一个仓库以后,origin表示所克隆的原始仓库。即使我们从零开始,这个名称也存在。

复制代码

# Add …/remote-repository.git with the name origin

git remote add origin …/remote-repository.git

Again some changes

echo “I added a remote repo” > test02

Commit

git commit -a -m “This is a test for the new remote origin”

If you do not label a repository it will push to origin

git push origin

复制代码

5.4. 显示已有的远端仓库

通过以下命令查看已经存在的远端仓库

# Show the existing defined remote repositories

git remote

5.5. 克隆仓库

通过以下命令在新的目录下创建一个新的仓库

复制代码

# Switch to home

cd ~

Make new directory

mkdir repo02

Switch to new directory

cd ~/repo02

Clone

git clone …/remote-repository.git .

复制代码

5.6. 拉取(Pull)更改

通过拉取,可以从其他的仓库中获取最新的更改。在第二个仓库中,做一些更改,然后将更改推送到远端的仓库中。然后第一个仓库拉取这些更改

复制代码

# Switch to home

cd ~

Switch to second directory

cd ~/repo02

Make changes

echo “A change” > test01

Commit

git commit -a -m “A change”

Push changes to remote repository

Origin is automatically maintained as we cloned from this repository

git push origin

Switch to the first repository and pull in the changes

cd ~/repo01

git pull …/remote-repository.git/

Check the changes

less test01

复制代码

6. 还原更改


如果在你的工作副本中,你创建了不想被提交的文件,你可以丢弃它。

复制代码

# Create a new file with content

touch test04

echo “this is trash” > test04

Make a dry-run to see what would happen

-n is the same as --dry-run

git clean -n

Now delete

git clean -f

复制代码

你可以提取老版本的代码,通过提交的ID。git log命令可以查看提交ID

复制代码

# Switch to home

cd ~/repo01

Get the log

git log

Copy one of the older commits and checkout the older revision via 译者注:checkout 后加commit id就是把commit的内容复制到index和工作副本中

git checkout commit_name

复制代码

如果你还未把更改加入到索引中,你也可以直接还原所有的更改

复制代码

#Some nonsense change

echo “nonsense change” > test01

Not added to the staging index. Therefore we can

just checkout the old version

#译者注:checkout后如果没有commit id号,就是从index中拷贝数据到工作副本,不涉及commit部分的改变

git checkout test01

Check the result

cat test01

Another nonsense change

echo “another nonsense change” > test01

We add the file to the staging index

git add test01

Restore the file in the staging index

#译者注:复制HEAD所指commit的test01文件到index中

git reset HEAD test01

Get the old version from the staging index

#译者注:复制index中test01到工作副本中

git checkout test01

#译者注,以上两条命令可以合并为git checkout HEAD test01

复制代码

也可以通过revert命令进行还原操作

# Revert a commit

git revert commit_name

即使你删除了一个未添加到索引和提交的文件,你也可以还原出这个文件

# Delete a file

rm test01

Revert the deletion

git checkout test01

如果你已经添加一个文件到索引中,但是未提交。可以通过git reset file 命令将这个文件从索引中删除

复制代码

// Create a file

touch incorrect.txt

// Accidently add it to the index

git add .

// Remove it from the index

git reset incorrect.txt

// Delete the file

rm incorrect.txt

复制代码

如果你删除了文件夹且尚未提交,可以通过以下命令来恢复这个文件夹 。译者注:即使已经提交,也可以还原

git checkout HEAD – your_dir_to_restore

译者注:checkout和reset这两个命令的含义是不同的,可以参阅这篇文章http://marklodato.github.com/visual-git-guide/index-en.html

7. 标记


Git可以使用对历史记录中的任一版本进行标记。这样在后续的版本中就能轻松的找到。一般来说,被用来标记某个发行的版本

可以通过git tag命令列出所有的标记,通过如下命令来创建一个标记和恢复到一个标记

git tag version1.6 -m ‘version 1.6’

git checkout <tag_name>

8. 分支、合并


8.1. 分支

通过分支,可以创造独立的代码副本。默认的分支叫master。Git消耗很少的资源就能创建分支。Git鼓励开发人员多使用分支

下面的命令列出了所有的本地分支,当前所在的分支前带有*号

git branch

如果你还想看到远端仓库的分支,可以使用下面的命令

git branch -a

可以通过下面的命令来创建一个新的分支

复制代码

# Syntax: git branch

in the above is optional

if not specified the last commit will be used

If specified the corresponding commit will be used

git branch testing

Switch to your new branch

git checkout testing

Some changes

echo “Cool new feature in this branch” > test01

git commit -a -m “new feature”

Switch to the master branch

git checkout master

Check that the content of test01 is the old one

cat test01

复制代码

8.2. 合并

通过Merge我们可以合并两个不同分支的结果。Merge通过所谓的三路合并来完成。分别来自两个分支的最新commit和两个分支的最新公共commit

可以通过如下的命令进行合并

# Syntax: git merge

git merge testing

一旦合并发生了冲突,Git会标志出来,开发人员需要手工的去解决这些冲突。解决冲突以后,就可以将文件添加到索引中,然后提交更改

8.3. 删除分支

删除分支的命令如下:

#Delete branch testing

git branch -d testing

Check if branch has been deleted

git branch

8.4. 推送(push)一个分支到远端仓库

默认的,Git只会推送匹配的分支的远端仓库。这意味在使用git push命令默认推送你的分支之前,需要手工的推送一次这个分支。

复制代码

# Push testing branch to remote repository

git push origin testing

Switch to the testing branch

git checkout testing

Some changes

echo “News for you” > test01

git commit -a -m “new feature in branch”

Push all including branch

git push

复制代码

通过这种方式,你可以确定哪些分支对于其他仓库是可见的,而哪些只是本地的分支

9. 解决合并冲突


如果两个不同的开发人员对同一个文件进行了修改,那么合并冲突就会发生。而Git没有智能到自动解决合并两个修改

在这一节中,我们会首先制造一个合并冲突,然后解决它,并应用到Git仓库中

下面会产生一个合并冲突

复制代码

# Switch to the first directory

cd ~/repo01

Make changes

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

总结

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

ogOZ-1711932069169)]](https://blog.youkuaiyun.com/gdutxiaoxu/article/details/50448572 “复制代码”)

# Switch to the first directory

cd ~/repo01

Make changes

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-hirSlqeD-1711932069169)]
[外链图片转存中…(img-qc2oMyxp-1711932069170)]
[外链图片转存中…(img-CCo7zAnW-1711932069170)]
[外链图片转存中…(img-xAD3FUzg-1711932069170)]
[外链图片转存中…(img-JZa1LUdC-1711932069171)]
[外链图片转存中…(img-u3rbXsbm-1711932069171)]
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-kTwXWetX-1711932069171)]

总结

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

[外链图片转存中…(img-Bz5MtH2o-1711932069171)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值