Agil Antony 发布的文章

在遇到合并冲突时,请不要惊慌。通过一些娴熟的技巧协商,你可以解决任何冲突。

假设你和我正在共同编辑同一个名称为 index.html 的文件。我对文件进行了修改,进行了提交,并将更改推送到 Git 远程仓库。你也对同一个文件进行了修改,进行了提交,并开始将更改推送到同一个 Git 仓库。然而,Git 检测到一个冲突,因为你所做的更改与我所做的更改冲突。

以下是你可以解决冲突的方法:

1、从远程仓库获取并合并最新更改:

$ git pull

2、识别一个或多个有冲突的文件:

$ git status

3、使用文本编辑器打开冲突文件:

$ vim index.html

4、解决冲突。冲突的修改会被标记为 <<<<<<< HEAD>>>>>>>。你需要选择要保留和放弃哪些修改,并手动编辑文件以合并冲突的修改。

以下是一个示例:

<<<<<<< HEAD
<div class="header">
<h1>Sample text 1</h1>
</div>
=======
<div class="header">
<h1>Sample text 2</h1>
</div>
>>>>>>> feature-branch

在这个例子中,我将网站标题更改为 Sample text 1,而你将标题更改为 Sample text 2。两种更改都已添加到文件中。现在你可以决定保留哪一个标题,或者编辑文件以合并更改。在任一情况下,删除指示更改开始和结束的标记,只留下你想要的代码:

<div class="header">
<h1>Sample text 2</h1>
</div>

5、保存所有更改,并关闭编辑器。

6、将文件添加到暂存区:

$ git add index.html

7、提交更改:

$ git commit -m "Updated h1 in index.html"

此命令使用消息 Resolved merge conflict 提交更改。

8、将更改推送到远程仓库:

$ git push

结论

合并冲突是将注意力集中于代码的好理由。你在文件中进行的更改越多,就越容易产生冲突。你应该进行更多的提交,每个提交更改应该更少。你应该避免进行包含多个特性增强或错误修复的单片巨大更改。你的项目经理也会感谢你,因为具有清晰意图的提交更容易追踪。在最初遇到 Git 合并冲突时可能会感到吓人,但是现在你知道如何解决它,你会发现它很容易解决。

(题图:MJ/f432c41a-eb4f-4de0-b2da-f3d8d7a86e26)


via: https://opensource.com/article/23/4/resolve-git-merge-conflicts

作者:Agil Antony 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

git log 命令是 Git 中一个很重要的查看提交记录的工具,它也是人们喜欢使用 Git 的原因之一。

git log 命令能够让你了解到更多关于贡献者 提交 commit 的记录。使用 git log 的一种方式是按日期查看提交记录 。要查看在指定日期或日期范围内创建的 Git 存储库中的提交记录,请使用带有选项 --since--until 或者同时使用以上两个选项的 git log 命令。

首先,进入你要查看的分支(例如,main 分支):

$ git checkout main

接下来,你可以使用以下命令,来显示当前日期(即今天)的提交记录:

$ git log --oneline --since="yesterday"

仅显示某一特定用户(例如,用户 Agil)在今天的提交记录:

$ git log --oneline --since="yesterday" --author="Agil"

还可以显示在某一日期范围内的提交记录。使用以下命令,显示在任意两个日期之间(例如,2022 年 4 月 22 日至 2022 年 4 月 24 日)的提交记录:

$ git log --oneline --since="2022-04-22" --until="2022-04-24"

在上面这个例子中,会输出 2022 年 4 月 22 日至 2022 年 4 月 24 日期间,不包括 2022 年 4 月 22 日的所有提交记录。如果你想要包括 2022 年 4 月 22 日的提交记录,请将命令中的 2022-04-22 替换为 2022-04-21

运行以下命令,能够显示某一特定用户(例如,用户 Agil)在两个指定的日期之间的提交记录:

$ git log --oneline --since="2022-04-22" --until="2022-04-24" --author="Agil"

总结

Git 有很多优点,其中一个优点就是 Git 让你能够收集你项目的相关数据。git log 命令是一个重要的查看提交记录的工具,也是人们喜欢使用 Git 的原因之一!


via: https://opensource.com/article/22/10/git-log-command

作者:Agil Antony 选题:lkxed 译者:chai001125 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

遵循几个简单的步骤来保持 Git 仓库的整洁

在合并一个 GibLab 的合并请求(MR)或 GitHub 的拉取请求(PR)后,你通常需要从远程仓库中删掉这个主题分支来保持仓库的整洁。然而,这只会删掉远程仓库的主题分支。本地 Git 仓库也会从例行清理中收益。

要同步本地仓库和远程仓库的信息,可以执行 git prune 命令来删除本地仓库中远程分支的本地引用。

按照以下三个简单的步骤:

1、检出仓库中的核心分支(比如 main 或者 master):

$ git checkout <central_branch_name>

2、列出所有远程和本地分支:

$ git branch -a

示例输出:

4.10.z
* master
  remotes/mydata/4.9-stage
  remotes/mydata/4.9.z
  remotes/mydata/test-branch

在这个例子中,test-branch 是从远程仓库中删除的主题分支的名字。

3、删除远程分支的本地引用:

首先,列出所有可以从本地仓库中删除的分支:

$ git remote prune origin --dry-run

示例输出:

Pruning origin
URL: [email protected]:myorg/mydata-4.10.git
* [would prune] origin/test-branch

然后,删除远程分支的本地引用:

$ git remote prune origin

示例输出:

Pruning origin
URL: [email protected]:myorg/mydata-4.10.git
* [pruned] origin/test-branch

就是这样!

维护 Git 仓库

保持 Git 仓库的整洁,一开始似乎并不紧急,但是随着仓库规模的增长,删除不必要的数据就变得更为重要。不要让从无用的数据筛选而拖慢你。

经常删除远程分支的本地引用,是维护一个可用的 Git 仓库是一个好方法。


via: https://opensource.com/article/22/8/delete-local-reference-remote-branch-git

作者:Agil Antony 选题:lkxed 译者:Yufei-Yan 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

掌握管理本地/远程分支等最常见的 Git 任务。

Git 的主要优势之一就是它能够将工作“分叉”到不同的分支中。

如果只有你一个人在使用某个存储库,分支的好处是有限的。但是,一旦你开始与许多其他贡献者一起工作,分支就变得必不可少。Git 的分支机制允许多人同时处理一个项目,甚至是同一个文件。用户可以引入不同的功能,彼此独立,然后稍后将更改合并回主分支。那些专门为一个目的创建的分支,有时也被称为 主题分支 topic branch ,例如添加新功能或修复已知错误。

当你开始使用分支,了解如何管理它们会很有帮助。以下是开发者在现实世界中使用 Git 分支执行的最常见任务。

重命名分支

有时候,你或许会错误地命名了一个分支,或者你会想要在内容合并到主分支后,使用同一个分支在不同的错误或任务之间切换。在这种情况下,重命名主题分支就会很有帮助。

重命名本地分支

1、重命名本地分支:

$ git branch -m <old_branch_name> <new_branch_name>

当然,这只会重命名你的分支副本。如果远程 Git 服务器上存在该分支,请继续执行后续步骤。

2、推送这个新分支,从而创建一个新的远程分支:

$ git push origin <new_branch_name>

3、删除旧的远程分支:

$ git push origin -d -f <old_branch_name>

重命名当前分支

当你要重命名的分支恰好是当前分支时,你不需要指定旧的分支名称。

1、重命名当前分支:

$ git branch -m <new_branch_name>

2、推送新分支,从而创建一个新的远程分支:

$ git push origin <new_branch_name>

3、删除旧的远程分支:

$ git push origin -d -f <old_branch_name>

使用 Git 删除本地和远程分支

为了保持存储库的整洁,通常建议你在确保已将内容合并到主分支后,删除临时分支。

删除本地分支

删除本地分支只会删除系统上存在的该分支的副本。如果分支已经被推送到远程存储库,它仍然可供使用该存储库的每个人使用。

1、签出存储库的主分支(例如 mainmaster):

$ git checkout <central_branch_name>

2、列出所有分支(本地和远程):

$ git branch -a

3、删除本地分支:

$ git branch -d <name_of_the_branch>

要删除所有本地主题分支并仅保留 main 分支:

$ git branch | grep -v main | xargs git branch -d

删除远程分支

删除远程分支只会删除远程服务器上存在的该分支的副本。如果你想撤销删除,也可以将其重新推送到远程(例如 GitHub),只要你还有本地副本即可。

1、签出存储库的主分支(通常是 mainmaster):

$ git checkout <central_branch_name>

2、列出所有分支(本地和远程):

$ git branch -a

3、删除远程分支:

$ git push origin -d <name_of_the_branch>

查看远程主题分支的作者

如果你是存储库管理员,你可能会有这个需求,以便通知未使用分支的作者它将被删除。

1、签出存储库的主分支(例如 mainmaster):

$ git checkout <central_branch_name>

2、删除不存在的远程分支的分支引用:

$ git remote prune origin

3、列出存储库中所有远程主题分支的作者,使用 --format 选项,并配合特殊的选择器来只打印你想要的信息(在本例中,%(authorname)%(refname) 分别代表作者名字和分支名称):

$ git for-each-ref --sort=authordate --format='%(authorname) %(refname)' refs/remotes

示例输出:

tux  refs/remotes/origin/dev
agil refs/remotes/origin/main

你可以添加更多格式,包括颜色编码和字符串操作,以便于阅读:

$ git for-each-ref --sort=authordate \
    --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p)%(align:25,left)%(color:yellow) %(authorname)%(end)%(color:reset)%(refname:strip=3)' \
    refs/remotes

示例输出:

01/16/2019 03:18 PM tux      dev
05/15/2022 10:35 PM agil     main

你可以使用 grep 获取特定远程主题分支的作者:

$ git for-each-ref --sort=authordate \
    --format='%(authorname) %(refname)' \
    refs/remotes | grep <topic_branch_name>

熟练运用分支

Git 分支的工作方式存在细微差别,具体取决于你想要分叉代码库的位置、存储库维护者如何管理分支、 压扁 squashing 变基 rebasing 等。若想进一步了解该主题,你可以阅读下面这三篇文章:


via: https://opensource.com/article/22/5/git-branch-rename-delete-find-author

作者:Agil Antony 选题:lkxed 译者:lkxed 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出